jframe 1:用戶將輸入在文本字段上詢問的信息,當他們點擊開始按鈕時,輸入應該顯示在另一個jframe中。如何使輸入在第一個jframe中的文本字段中輸入的內容顯示在另一個jframe上的jlabel上?
jframe 2:在jframe1的文本字段中輸入的信息應該出現在jlabels上。
jframe 1:用戶將輸入在文本字段上詢問的信息,當他們點擊開始按鈕時,輸入應該顯示在另一個jframe中。如何使輸入在第一個jframe中的文本字段中輸入的內容顯示在另一個jframe上的jlabel上?
jframe 2:在jframe1的文本字段中輸入的信息應該出現在jlabels上。
如果jframe 1調用jframe 2,那麼你可以在jframe 2中創建一個構造函數,並傳遞這個值。
或者你可以通過讓一個包含jframe 1的對象來做到這一點,然後進入第二幀,通過getter方法獲取它們。
但是,對於一個良好的習慣,您應該使用單個jframe和對話框。
JFrame frame1 = new JFrame("frame1");
JPanel panel = new JPanel();
final JTextField textField = new JTextField("Text Here");
JButton button = new JButton("Copy label to other frame");
panel.add(textField);
panel.add(button);
frame1.add(panel);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.pack();
frame1.setLocationByPlatform(true);
frame1.setVisible(true);
JFrame frame2 = new JFrame("frame2");
final JLabel label2 = new JLabel("Label 2 Text");
frame2.add(label2);
frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame2.pack();
frame2.setLocationRelativeTo(null);
frame2.setVisible(true);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
label2.setText(textField.getText());
}
});
當然,你的問題並沒有很好地表達你真正想要完成的或者更好的,你已經嘗試過的。儘管如此,這些代碼可以滿足你的要求。
如果您想將用戶輸入的文本放在jlabel上,您必須首先創建jframe1
,然後jframe1
將創建jframe2
將文本傳遞給它。 jframe2
將創建jlabels設置構造函數中的文本。
如果你想jframe1
消失,我認爲你不能關閉它(因爲如果你關閉它,像jframe1創建jframe2
,這個也將被關閉)。當用戶點擊開始按鈕時,您可以隱藏jframe1
將其設置爲不可見。
jframe1.setVisible(false);
在第一幀中有第二幀的實例。將信息傳遞給第二個構造函數JFrame
。就這麼簡單。
public class Frame1 extends JFrame {
String text1;
String text2;
Frame2 frame2; <--- second frame
....
public void actionPerformed(ActionEvent e) {
text1 = textField1.getText();
text2 = textField2.getText();
frame2 = new Frame2(text1, text2);
}
}
public class Frame2 extends JFrame {
String text1;
String text2;
public Frame2(String text1, String text2){
this.text1 = text1;
this.text2 = text2;
}
}
當第二框架在actionPerformed
實例化時,它將使所述第二幀出現。它也正在傳遞來自文本字段的信息。您可能還想要處理第一幀。
模態JDialog
是只是容易使作爲JFrame
是相同的結構。唯一的區別是你可以設置它爲模態(意味着它不是其他的JDialog)可以被訪問。見this answer看到鋤頭建立JDialog
一個登錄
下面是一個使用非常簡單的程序符合你的要求
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class JDialogDemo {
MyDialog dialog;
JLabel label;
JFrame frame;
public JDialogDemo() {
label = new JLabel(" ");
frame = new JFrame("Hello World");
frame.add(label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
dialog = new MyDialog(frame, true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
new JDialogDemo();
}
});
}
class MyDialog extends JDialog {
private JButton button = new JButton("Submit");
private JTextField jtf1;
private JTextField jtf2;
public MyDialog(final Frame frame, boolean modal) {
super(frame, true);
jtf1 = new JTextField(15);
jtf2 = new JTextField(15);
add(button, BorderLayout.SOUTH);
add(jtf1, BorderLayout.CENTER);
add(jtf2, BorderLayout.NORTH);
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
String text1 = jtf1.getText();
String text2 = jtf2.getText();
label.setText(text1 + " " + text2);
dispose();
frame.revalidate();
frame.repaint();
frame.setVisible(true);
}
});
pack();
setVisible(true);
}
}
}
它應該很容易遵循JDialog
。讓我知道如果您有任何疑問
使用[單幀](http://stackoverflow.com/q/9554636/230513)和一個對話框。 – trashgod
除了@trashgod的忠告之外,請參閱[使用多個JFrames,好/壞實踐?](http://stackoverflow.com/a/9554657/418556) –