来自自定义JOptionPane的返回值,Java
我正在创建一个自定义类,该类返回一个JFrame,然后将其传递到一个JOptionPane,因为JOptionPane中需要两个文本字段,而不是一个。当按下OK时,是否有任何方法可以获取返回值来自自定义JOptionPane的返回值,Java,java,swing,return,joptionpane,Java,Swing,Return,Joptionpane,我正在创建一个自定义类,该类返回一个JFrame,然后将其传递到一个JOptionPane,因为JOptionPane中需要两个文本字段,而不是一个。当按下OK时,是否有任何方法可以获取返回值 public static JFrame TwoFieldPane(){ JPanel p = new JPanel(new GridBagLayout()); p.setBackground(background); p.setBorder(new EmptyBorder(10,
public static JFrame TwoFieldPane(){
JPanel p = new JPanel(new GridBagLayout());
p.setBackground(background);
p.setBorder(new EmptyBorder(10, 10, 10, 10) );
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
p.add(new JLabel(field1), c);
c.gridx = 0;
c.gridy = 1;
p.add(new JLabel(field2), c);
//p.add(labels, BorderLayout.WEST);
c.gridx = 1;
c.gridy = 0;
c.ipadx = 100;
final JTextField username = new JTextField(pretext1);
username.setBackground(foreground);
username.setForeground(textcolor);
p.add(username, c);
c.gridx = 1;
c.gridy = 1;
JTextField password = new JTextField(pretext2);
password.setBackground(foreground);
password.setForeground(textcolor);
p.add(password, c);
c.gridx = 1;
c.gridy = 2;
c.ipadx = 0;
JButton okay = new JButton("OK");
okay.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
f.setVisible(false);
//RETURN VALUE HERE
}
});
p.add(okay, c);
f.add(p);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
return f;
}
这就是我创建它的地方:
try{
JOptionPane.showInputDialog(Misc.TwoFieldPane("Server ip: ", "" , "Port: ", ""));
}catch(IllegalArgumentException e){e.printStackTrace(); }
你的代码有点不寻常。让我提出建议:
- 不要将JFrame用于JOptionPane,这有点古怪
- 避免过度使用静态方法。OOPs是一条路要走
- 创建一个类,该类为您创建JOptionPane的JPanel,并具有实际的实例字段
- 给出类getter方法,允许您在JOptionPane返回后查询其状态
- 创建您的JOptionPane,并为其提供一个从上面的类创建的JPanel
- 在JOptionPane返回后,查询放置在其中的对象的字段状态
public class MyPanel extends JPanel {
private JTextField field1 = new JTextField(10);
// .... other fields ? ...
public MyPanel() {
add(new JLabel("Field 1:");
add(field1);
}
public String getField1Text() {
return field1.getText();
}
// .... other getters for other fields
}
。。。在另一个班级的其他地方
MyPanel myPanel = new MyPanel();
int result = JOptionPane.showConfirmDialog(someComponent, myPanel);
if (result == JOptionPane.OK_OPTION) {
String text1 = myPanel.getField1Text();
// ..... String text2 = ...... etc .....
// .... .use the results here
}
另外,不要使用JTextField或字符串作为密码,除非应用程序不关心安全性。改用JPasswordField和char数组。您的代码有点不寻常。让我提出建议:
- 不要将JFrame用于JOptionPane,这有点古怪
- 避免过度使用静态方法。OOPs是一条路要走
- 创建一个类,该类为您创建JOptionPane的JPanel,并具有实际的实例字段
- 给出类getter方法,允许您在JOptionPane返回后查询其状态
- 创建您的JOptionPane,并为其提供一个从上面的类创建的JPanel
- 在JOptionPane返回后,查询放置在其中的对象的字段状态
public class MyPanel extends JPanel {
private JTextField field1 = new JTextField(10);
// .... other fields ? ...
public MyPanel() {
add(new JLabel("Field 1:");
add(field1);
}
public String getField1Text() {
return field1.getText();
}
// .... other getters for other fields
}
。。。在另一个班级的其他地方
MyPanel myPanel = new MyPanel();
int result = JOptionPane.showConfirmDialog(someComponent, myPanel);
if (result == JOptionPane.OK_OPTION) {
String text1 = myPanel.getField1Text();
// ..... String text2 = ...... etc .....
// .... .use the results here
}
另外,不要使用JTextField或字符串作为密码,除非应用程序不关心安全性。使用JPasswordField和char数组代替。+1很好的新建议..但我不确定我是否会使用joption窗格,也许只是一个jdialog@nachokk:哦,我一直都是这样使用工作窗格的。它们可以容纳非常复杂的GUI,并以简洁的方式显示对话框。@nachokk a
JOptionPane
提供了许多您必须自己编写的功能,如按钮,并提供了非常灵活的API以提供非常可定制的解决方案。有时候,你可能别无选择,只能使用JDialog
,但还有很多地方JOptionPane
更有用-IMHO+1很好的新建议..但我不确定我是否会使用joption pane,也许只是一个jdialog@nachokk:哦,我一直都是这样使用工作窗格的。它们可以容纳非常复杂的GUI,并以简洁的方式显示对话框。@nachokk aJOptionPane
提供了许多您必须自己编写的功能,如按钮,并提供了非常灵活的API以提供非常可定制的解决方案。有时,您可能别无选择,只能使用JDialog
,但是JOptionPane
更有用的地方还有很多-IMHO