2013-12-20 5 views
1

파일에서 빨간 선을 배열 객체를 저장하고 GUI 클래스에 표시하는 클래스의 배열에 추가하는 것보다 주 파일을 읽어야합니다. 내 문제는 아무것도 GUI로 간다입니다. getTeamNameTeam에서 null을 반환합니다. GUI에서 파일 읽기 및 디스플레이

은 내가 MatchManager

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

       teams[i] = teamName; 

     return teamName; 


    } 

의 팀 [] 배열에 행을 추가보다

   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

  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());은 아무 것도 반환하지 않습니다.

+1

환영을 인쇄하려면! 여러분이 묻는 질문은 정말 광범위하며 문제가 숨어있는 부분을 이해하기 어렵게 만드는 많은 코드를 게시했습니다. 그것을 [Short, Self Contained, Correct Example (SSCCE) (http://www.sscce.org/)]로 축소 해 줄 수 있습니까? 또한, 귀하가 시도한 것을 알려주십시오. – Thunderforge

+0

"JavaBallTournamentGUI 디스플레이"는 JFrame과 같은 UI 일종이라고 생각합니다. 문제는 당신이 setVisible (..) 이외의 "display"에서 다른 함수를 호출하지 않는다는 것입니다. – aquaraga

+0

_ "팀의 getTeamName은 null을 반환합니다"_ 정확히'getTeamName'을 호출합니까? –

답변

2

여기에 약간의 조언이 있습니다. 전체 프로그램을 재구성하는 것이 좋습니다. 나는 그것이 "와 같이 보일지도 모른다라는 것을 알고있다 당신은 진짜 다?, 그렇지만 나는 진지해. 나는 당신이 아마 그것에 많은 시간을 보냈다는 것을 알고 있습니다. 그리고 당신이하고 싶은 마지막 일은 다시 시작하는 것이지만, 현실은 당신이 정말로 열악한 디자인을 가진 것처럼 보입니다. 다음은 몇 가지 포인터입니다.

  • 데이터와 뷰를 별도로 유지하십시오. 그리고 귀하의 데이터에 어떤 구조가 있습니다. 제가 말하고자하는 것은 모든 데이터와 데이터 조작 방법을 하나의 클래스로 유지하는 것입니다.

여기에 무엇 위의 코드가하는 일은 당신이 MatchManager를 인스턴스화되면, 모든 팀이 채워 것이다 프로그램

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

에서 아이디어를 사용하는 예입니다.


  • JavaBallTournamentGUI 클래스는 프로그램에서 실행해야 할 것입니다. 데이터를 보존하고 별도로 보는 방법에 대해 이야기했던 것을 기억하십시오. 당신이 그것에 대해 생각한다면, 데이터가 실행되어야합니까? 아니요, 데이터는 프로그램이 아닙니다. 그러나 GUI는 프로그램입니다. 따라서 모델 클래스 인 MatchManager에서 데이터를 가져 오는 GUI 프로그램을 실행하십시오.

이와 비슷한 것입니다.

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

@peeskkillet 도움을 주셔서 감사합니다. array-list 대신에 간단한 배열을 사용해야하고 main 메소드 나 GUI에서 파일을 읽을 필요가 있습니다. – ismc2222

+0

ArrayList를 사용한 것과 같은 방식으로 배열을 사용할 수 있습니다. 목록 코드를 원래 배열 코드로 바꿉니다. 그리고 왜'main' 파일을 읽어야할까요? GUI에서'MatchManager' 인스턴스를 생성하면 모든 날짜가 배열에 저장됩니다. 이는 'MatchManager' 생성자 때문입니다. 당신은 당신의 GUI에'main' 메쏘드를 갖고 싶습니다. –

+0

사실 MatchManager에서 파일을 읽을 수 있지만 팀 이름과 점수를 보유한 팀 클래스가 필요합니다. 그리고 팀 []은 팀 객체의 배열입니다 – ismc2222