繁体   English   中英

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

[英]Read from file and display in GUI java

我需要从主要读取文件,而不是将红线(来自文件)添加到存储数组对象并在GUI类中显示的类中的数组。 我的问题是GUI没有任何内容。 TeamgetTeamName返回null

我读了文件

                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);

比我在MatchManager的Team []数组中添加行

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

                 teams[i] = teamName;

         return teamName;


    }

我想在GUI中显示

         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;
    }

但是display.setText(t.getTeamName()); 不返回任何东西。

这里有一些建议。 您可能需要重组整个程序。 我知道这似乎是“ 您是真的吗?” ,但是,我是认真的。 我知道您可能已经花了很多时间,最后要做的就是重新开始,但实际上,您似乎设计得很差。 这是一些指针。

  • 保持数据和视图分开。 并具有一些数据结构。 我的意思是将所有数据和数据处理方法都放在一个类中。

这是一个示例,使用程序中的想法

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程序从ModelMatchManager获取数据。

这样的事情。

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");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM