从文件中读取并在GUI java中显示

时间:2013-12-20 08:55:29

标签: java parameter-passing

我需要在main中读取文件,而不是将红线(从文件中)添加到存储数组对象的类中的数组,并在GUI类中显示。我的问题是没有任何内容进入GUI。来自getTeamName的{​​{1}}会返回Team

我在

中阅读了该文件
null

比在MatchManager

中向Team []数组添加行
                fr = new FileReader("TeamsIn.txt"); 
                Scanner in = new Scanner(fr);
                while (in.hasNextLine()){
                String line = in.nextLine();

                team = new Team(line);
                team = teamIn.addTeam(team);

我想在GUI中显示

    public  Team addTeam( Team teamName)
    {
         for(int i = 0; i < MAX_TEAMS; i++)

                 teams[i] = teamName;

         return teamName;


    }

但是 Team t = new Team(teamName); display = new JTextArea(ROWS, COLUMNS); display.setEditable(false); display.setText(t.getTeamName()); JScrollPane scrollPane = new JScrollPane(display); return scrollPane; public class Team { public Team(String teamName){ this.teamName = teamName; //System.err.println(teamName); } public String getTeamName(){ return teamName; } public String setTeamName(String tName){ return teamName; } 并没有返回任何内容。

1 个答案:

答案 0 :(得分:2)

这里有一些建议。您可能想重组整个程序。我知道它可能看起来像#34; 你是真的吗?&#34; ,但是我是认真的。我知道你可能花了很多时间在它上面,你要做的最后一件事就是重新开始,但实际情况是,你似乎有一个非常糟糕的设计。这是一些指针。

  • 保持数据和视图分开。并为您的数据提供一些结构。我的意思是将所有数据和数据操作方法保存在一个类中。

以下是一个例子,使用程序中的想法

public class MatchManager {          // This class holds all the teams

    private List<Team> teams = new ArrayList<Team>();
    private int countTeam;
    private static  int MAX_TEAMS=8;

    public MatchManager(){
        try {
            FileReader fr = new FileReader("TeamsIn.txt"); 
            Scanner in = new Scanner(fr);

            while (in.hasNextLine()){
                String line = in.nextLine();

                Team team = new Team(line);
                teams.add(team);
            }
        } catch ( ... ) {}
    }

    public List<Team> getTeams(){
        return teams;
    }
}

上述代码的作用是实例化MatchManager后,所有团队都会被填充。


  • JavaBallTournamentGUI类是程序应该从中启动的类。记住我是如何谈论保持数据和视图分开的。如果你考虑一下,数据应该运行吗?不,数据不是程序。 GUI虽然是一个程序。因此,运行GUI程序从 Model MatchManager获取数据。

像这样。

public class JavaBallTournamentGUI extends JFrame {
    MatchManager manager = new MatchManager();
    List<Team> teams;

    public JavaBallTournamentGUI(){
        teams = manager.getTeams();
    }
}

现在,您可以使用GUI类中MatchManager的所有数据。


  • 我注意到你在几个不同的地方实例化了Team课程。这真的没有必要。只要您想获取团队数据,就可以从团队列表中调用它,
像这样

String oneTeam = teams.get(2).getTeamName();
textField.setText(oneTeam);

您是否注意到这一切如何顺畅地流动?如果你不抱歉,我尽力解释。但我希望你能得到这个要点。这种类型的设计更清洁。

编辑:打印全部

如果是JTextArea

for (Team team : teams){
    textArea.append(team.getTeamName() + "\n");
}