我的问题与 java swing frame 有关。我有两个jframe。jframe1 和 jframe2。jframe1中有一个jbutton,当用户单击jbutton时我想显示jframe 2.jframe2有一个文本框,jbutton用户可以在文本框中输入值,当用户单击jbutton时,我想将焦点设置为第一个jframe并传递用户在 jrame1 中输入了 jlable 的值。请帮助我做到这一点。
问问题
2483 次
1 回答
2
在我看来,第二帧更像是一个对话框,用于输入一个值,然后将其返回给调用者(第一帧)。
为此,您创建一个 modal JDialog
,在其中添加控件(文本字段,确定,也许还有一个取消按钮)并添加一个打开对话框(阻止调用者)并返回输入的文本的方法,除非它被取消。这样,您可以直接传递输入的文本,而不必将其临时存储到变量中(这通常是不好的做法)。
这是这样一个对话框的简单实现:
public class SwingTestDialog extends JDialog {
private JTextField text;
private boolean cancelled = true;
public static void main (String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run () {
SwingTestDialog dialog = new SwingTestDialog();
String text = dialog.selectValue();
System.out.println("Selected: " + text);
}
});
}
public SwingTestDialog () {
setModal(true);
setTitle("Please enter something");
JPanel content = new JPanel();
content.setLayout(new BorderLayout(10, 10));
getContentPane().add(content);
text = new JTextField();
JButton ok = new JButton("Accept");
JButton cancel = new JButton("Cancel");
JPanel buttons = new JPanel();
buttons.setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 10));
buttons.add(ok);
buttons.add(cancel);
content.add(text, BorderLayout.NORTH);
content.add(buttons, BorderLayout.SOUTH);
content.setBorder(new EmptyBorder(15, 15, 15, 15));
pack();
ok.addActionListener(new ActionListener() {
public void actionPerformed (ActionEvent e) {
cancelled = false;
dispose();
}
});
cancel.addActionListener(new ActionListener() {
public void actionPerformed (ActionEvent e) {
cancelled = true;
dispose();
}
});
// default button, allows to trigger ok when pressing enter in the text field
getRootPane().setDefaultButton(ok);
}
/**
* Open the dialog (modal, blocks caller until dialog is disposed) and returns the entered value, or null if
* cancelled.
*/
public String selectValue () {
setVisible(true);
return cancelled ? null : text.getText();
}
}
于 2013-08-19T16:33:52.383 回答