2013-06-04 1 views
2

기본 레이아웃이 완료된 GUI에서 작업했습니다. 나는 모든 로직을 매핑했지만, 문제는 내가 채워진 배열을 공용 변수에 설정하는 방법을 알아내는 것입니다. String과 int는 그대로두고 나머지는 그대로 두지 않습니다. 절대로 프로그래밍을하는 전문가가 아니므로 그 대답이 매우 분명하다면 인내심을 가져주십시오. 채워진 배열을 공용 변수에 넣으려고하는 창이 게시됩니다.공용 변수에 채워진 배열을 전달하여 다른 클래스에서 사용할 수 있도록

공용 배열 'robbieArray'는 메인에서 soley를 사용하여 값을 출력하지만 프레임에서 사용할 수는 없습니다. 나는 프레임과 다른 클래스에 액세스 할 수 있도록 솔루션을 원합니다.

import java.awt.Container; 
import java.awt.GridLayout; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.SwingConstants; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 
import java.io.*; 
import java.beans.*; 



public class PlayerShow extends JFrame 
{ 

public JFrame playerShowFrame; 

public final int CLASSSIZE1 = 2;//subject to change 

//PlayerInput player = new PlayerInput(); 

public PlayerInput [] robbieArray = new PlayerInput [CLASSSIZE1]; 



public void main(String[] args) throws IOException, FileNotFoundException 
{ 
    // PlayerInput player = new PlayerInput(); 
Scanner inputRobbieChamps = new Scanner (new FileReader("robbie_mccarthy_champs.txt")); 

for (int x = 0; x<CLASSSIZE1;x++) 
{ 
    String champName = inputRobbieChamps.next(); 
    String role = inputRobbieChamps.next(); 
    int tier = inputRobbieChamps.nextInt(); 

    robbieArray[x] = new PlayerInput (champName, role, tier); 
System.out.println("The champ name is " + robbieArray[x].getChampName() +  "with a role of " + robbieArray[x].getRole() + " and a tier value of " + robbieArray[x].getTier()); 
} 
// PlayerInput [] robbieArray = new PlayerInput[CLASSSIZE1]; 



/* for (int x = 0; x<CLASSSIZE1; x++) 
    { 
     robbieArray [x] = new PlayerInput(); 
    } 

    for (int x = 0; x<CLASSSIZE1; x++) 
    { 
     robbieArray[x].setChampName(inputRobbieChamps.next()); 
     robbieArray[x].setRole(inputRobbieChamps.next()); 
     robbieArray[x].setTier(inputRobbieChamps.nextInt()); 
    }*/ 
    inputRobbieChamps.close(); 


} 


public PlayerShow() 
{ 
    frame(); 
    playerShowFrame.setVisible(false); 
} 

public void frame() 
{ 
    playerShowFrame = new JFrame(); 
    playerShowFrame.setVisible(true); 
    //playerShowFrame.setSize(900,600); 
    playerShowFrame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    getPlayerShowFrame().setBounds(100, 300, 900, 600); 
    playerShowFrame.setLayout(new GridLayout(5,8)); 

    JLabel titleL = new JLabel ("Robbie McCarthy's data:", SwingConstants.CENTER); 

    JLabel blank1L = new JLabel (" ", SwingConstants.CENTER); 

    JLabel blank2L = new JLabel (" ", SwingConstants.CENTER); 

    JLabel champNameL = new JLabel("Champion Name", SwingConstants.CENTER); 

    JLabel roleL = new JLabel ("Role", SwingConstants.CENTER); 

    JLabel tierL = new JLabel ("Tier", SwingConstants.CENTER); 

    JTextArea hugeTF = new JTextArea(); 

    hugeTF.setColumns(6); 
    hugeTF.setRows(3); 

//  for (int x = 0; x<CLASSSIZE1; x++) 
//  { 
    System.out.println(robbieArray[0].getRole()); // This is where I am checking to see if i get a filled public array 

//  } 

    hugeTF.setEditable(false); 

    playerShowFrame = getPlayerShowFrame(); 

    playerShowFrame.add(titleL); 

    playerShowFrame.add(blank1L); 

    playerShowFrame.add(blank2L); 

    playerShowFrame.add(champNameL); 

    playerShowFrame.add(roleL); 

    playerShowFrame.add(tierL); 

    playerShowFrame.add(hugeTF); 

} 




public JFrame getPlayerShowFrame() { 
    return playerShowFrame; 
} 

public void setPlayerShowFrame(JFrame playerShowFrame) { 
     this.playerShowFrame = playerShowFrame; 
} 
} 

답변

2

메이크업 배열 .. OOP의 캡슐화를 위해서, 내가 선언 할 경우 otherwords에서 PlayerShow.getRobbieArray()에 의해 그래서

+0

감사합니다! 나는 그 LOL을 결코 생각하지 않았을 것이다. – user2445983

1

하나의 가능성은 정적으로 선언하는 것입니다.

public static PlayerInput [] robbieArray = new PlayerInput [CLASSSIZE1]; 

그런 다음 어디에서든지 PlayerShow.robbieArray으로 액세스 할 수 있습니다.

PlayerShowrobbieArray의 인스턴스를 하나만 갖고 싶어한다고 가정합니다.

그렇지 않으면 생성자에서 매개 변수로 액세스해야하는 모든 클래스 나 설정 메소드를 통해 전달할 수 있습니다. 개인 정적으로

+0

를 액세스 할 수 있습니다

private static PlayerInput [] robbieArray = new PlayerInput [CLASSSIZE1]; public static PlayerInput [] getRobbieArray(){ return robbieArray; } 

다음 정적 게터를 만들 내 main 위에 public static으로 robbieArray를 넣은 다음 채우고 내 메인에 그 안에 물건을 넣습니다. 내가 액세스 할 때 프레임 내에서 System.out.println (robbieArray [0] .getRole())과 같은 말을 할 수 있어야합니다. 런타임 오류가 발생하지 않습니까? * 그냥 시도하고 정적 아무것도 변경됩니다. 음 정착기 방법은 무엇입니까? – user2445983

+0

그게 필요하지 않으면 정적으로 멤버를 넣어 생각하지 않아 .. 그것은 정적으로 게터 (메서드)로 정적이어야합니다 .. 정적 회원은 액세스 할 수 있으며 아무것도에 의해 편집 할 수 있다는 것을 의미합니다 .. –

+0

@ user2445983 제 답변에서 보았 듯이 클래스 이름 앞에 접두사가 필요합니다 -'System.out.println (PlayerShow.robbieArray [0] .getRole());'. –

관련 문제