2
我創建了一個自定義類,它返回一個JFrame,然後我傳入一個JOptionPane,因爲我需要兩個TextFields而不是一個JOptionPane。按下確定後,有什麼方法可以獲得返回值?返回值自定義JOptionPane,Java
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(); }
+1很好的新建議..但我不知道如果我會使用joption窗格或許只是一個jdialog – nachokk
@nachokk:哦,我一直以這種方式使用JOptionPanes。他們可以容納非常複雜的GUI,並以一種很好的緊湊模式顯示對話框。 –
@nachokk一個'JOptionPane'提供了許多必須自己編寫的功能,例如按鈕,並提供了一個非常靈活的API來提供非常可定製的解決方案。有時候你可能別無選擇,只能使用'JDialog',但是'JOptionPane'更有用的地方還有很多 - 恕我直言 – MadProgrammer