2015-02-01 1 views
0

많은 사람들이 글을 올리고 사람들이 답변을 읽었을 때, 나는 아직도 자바에서 데이터가 어떻게 전달되는지 알지 못한다. 여기에 사용자가 나이, 키, 몸무게 및 두 번째 프레임을 여는 버튼을 입력해야하는 간단한 코드가 있습니다.JFrame 1에서 다른 JFrame으로 데이터를 가져 오는 방법은 무엇입니까?

첫 프레임

public Collectdata() 
{ 
    JPanel text = new JPanel(); 
    text.add(jage); 
    text.add(age); 
    text.add(jheight); 
    text.add(height); 
    text.add(jweight); 
    text.add(weight); 
    text.setLayout(new GridLayout(3,2)); 

    JPanel jbutt = new JPanel(); 
    jbutt.add(next); 

    setLayout(new BorderLayout()); 
    add(text,BorderLayout.CENTER); 
    add(jbutt,BorderLayout.SOUTH); 

    next.addActionListener(this); 
} 

public static void main(String[] args) 
{ 
    Collectdata GUI = new Collectdata(); 
    GUI.setTitle("DataCollection");  //Set title 
    GUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //close program 
    GUI.setSize(250,150); 
    GUI.setVisible(true); 
} 

public void actionPerformed(ActionEvent a) 
{ 
    if(a.getSource() == next) 
    { 
     Calculate secondwind = new Calculate(this); 
     secondwind.setTitle("Calculate");  //Set title 
     secondwind.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //close program 
     secondwind.setSize(350,150); 
     secondwind.setVisible(true); 
     this.setVisible(false); 
    } 
} 

}

그리고이 버튼을 클릭 한 후 표시됩니다 2 프레임입니다.

2 프레임

public Calculate(Collectdata collectdata) 
{ 
    this.collectdata = collectdata; 

    JPanel text = new JPanel(); 
    text.add(jage); 
    text.add(age); 
    text.add(jheight); 
    text.add(height); 
    text.add(jweight); 
    text.add(weight); 
    text.setLayout(new GridLayout(3,2)); 

    age.setEditable(false); 
    height.setEditable(false); 
    weight.setEditable(false); 

    setLayout(new BorderLayout()); 
    add(text,BorderLayout.CENTER); 
} 
나는 JFrame의에서 키가 데이터가 2 JFrame의 일부 계산을 위해 데이터를 사용까지 통과 할 수 있도록 얻을 수 같은 것입니다

.

어떻게하면됩니까?

감사합니다.

+2

http://stackoverflow.com/q/9554636/1702990 가능성이 있습니까? – Sinkingpoint

+1

일반적으로 사용자에게 정보를 요청하거나 묻는 경우, 일종의 대화 상자를 사용합니다. 단명이고 일회용 윈도우입니다. 사용자의 소량의 정보를 수집하거나 질문을하거나 또는 어떤 종류의 유익한 통지를 제공 할 수 있습니다. 자세한 내용은 [대화 상자 작성 방법] (http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html)을 참조하십시오. – MadProgrammer

답변

2

일반적으로 사용자에게 정보를 요청하거나 묻는 경우, 일종의 대화 상자를 사용합니다.이 옵션은 수명이 짧고 일회용인데, 사용자의 소량의 정보를 수집해야합니다 , 질문을하거나 유익한 정보를 제공하십시오.

책임의 격리를 유지하고 최대한 코드를 연결 해제해야합니다. 예를 들어 Calculate 클래스는 정보가 생성되는 방식에주의를 기울여서도 안되고 컬렉션 클래스는 사용자가 ' 정보와 관련이 있습니다.

이를 위해, 당신은 사용자로부터 데이터를 수집하는 데 필요한 모든 필드가 포함 JPanel에서 연장, 사용자 정의 클래스를 생성하여 시작 ...

public class UserInfoEditorPane extends JPanel { 
    private JSpinner jage; 
    private JSpinner jheight; 
    private JSpinner jweight; 

    public UserInfoEditorPane() { 
     // Set the UI as you want... 
    } 

    public Collectdata getUserInfo() { 
     // Create a new instance of Collectdata 
     // and populate it with the values from 
     // the fields... 
     Collectdata data = ...; 
     //... 
     return data; 
    } 
} 

(내가 Collectdata을 사용하고 NB POJO가 같은 아닌 UI 클래스)

JOptionPane 같은 것을 사용하여 지금

, 사용자에게 패널을 표시 ...

UserInfoEditorPane userInfoPane = new UserInfoEditorPane(); 
switch (JOptionPane.showMessageDialog(null, userInfoPane, "User Info", JOptionPane.PLAIN_MESSAGE)) { 
    case JOptionPane.OK_OPTION: 
     Calculate secondwind = new Calculate(userInfoPane.getUserInfo()); 
     secondwind.setTitle("Calculate");  //Set title 
     secondwind.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //close program 
     secondwind.pack(); 
     secondwind.setLocationRelativeTo(null); 
     secondwind.setVisible(true); 
     break; 
} 

자세한 내용은 How to Make Dialogs을 참조하십시오.

관련 문제