创建Java对话框
创建对话框的最简单方法是什么:创建Java对话框,java,user-interface,dialog,Java,User Interface,Dialog,创建对话框的最简单方法是什么: 在一个窗口中,我给出了信封地址的数据,还从大小列表中设置了字体类型 单击“确定”后,在同一窗口或下一窗口中,我可以预览信封在给定名称下的外观,并使用选定的字体大小 它应该类似于: 我应该使用Jdialog吗?或者JOptionPane就足够了?下一步是选择字体和背景的颜色,所以我必须记住这一点。您需要使用JDialog。在JOptoinPane上乱搞毫无意义——它不仅仅是为了收集一个简单的字符串。此外,使用或-它将帮助您获得易于编码的良好布局。如果允许使用G
- 在一个窗口中,我给出了信封地址的数据,还从大小列表中设置了字体类型
- 单击“确定”后,在同一窗口或下一窗口中,我可以预览信封在给定名称下的外观,并使用选定的字体大小
我应该使用Jdialog吗?或者JOptionPane就足够了?下一步是选择字体和背景的颜色,所以我必须记住这一点。您需要使用JDialog。在JOptoinPane上乱搞毫无意义——它不仅仅是为了收集一个简单的字符串。此外,使用或-它将帮助您获得易于编码的良好布局。如果允许使用GUI生成器,我建议您使用 你可以在5-10分钟内创建类似的东西 如果这是不可能的(也许你想练习学习或其他东西),我会使用JFrame来代替)
应该没那么难做 这应该能让你走了
class TestDialog extends JDialog {
private JButton okButton = new JButton(new AbstractAction("ok") {
public void actionPerformed(ActionEvent e) {
System.err.println("User clicked ok");
// SHOW THE PREVIEW...
setVisible(false);
}
});
private JButton cancelButton = new JButton(new AbstractAction("cancel") {
public void actionPerformed(ActionEvent e) {
System.err.println("User clicked cancel");
setVisible(false);
}
});
private JTextField nameField = new JTextField(20);
private JTextField surnameField = new JTextField();
private JTextField addr1Field = new JTextField();
private JTextField addr2Field = new JTextField();
private JComboBox sizes = new JComboBox(new String[] { "small", "large" });
public TestDialog(JFrame frame, boolean modal, String myMessage) {
super(frame, "Envelope addressing", modal);
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
getContentPane().add(mainPanel);
JPanel addrPanel = new JPanel(new GridLayout(0, 1));
addrPanel.setBorder(BorderFactory.createTitledBorder("Receiver"));
addrPanel.add(new JLabel("Name"));
addrPanel.add(nameField);
addrPanel.add(new JLabel("Surname"));
addrPanel.add(surnameField);
addrPanel.add(new JLabel("Address 1"));
addrPanel.add(addr1Field);
addrPanel.add(new JLabel("Address 2"));
addrPanel.add(addr2Field);
mainPanel.add(addrPanel);
mainPanel.add(new JLabel(" "));
mainPanel.add(sizes);
JPanel buttons = new JPanel(new FlowLayout());
buttons.add(okButton);
buttons.add(cancelButton);
mainPanel.add(buttons);
pack();
setLocationRelativeTo(frame);
setVisible(true);
}
public String getAddr1() {
return addr1Field.getText();
}
// ...
}
结果:
您可以使用JOptionPane。您可以向其中添加任何Swing组件
创建一个包含除按钮外所需的所有组件的面板,然后将该面板添加到选项窗格中。这种方法唯一的问题是,默认情况下,焦点将集中在按钮上。若要解决此问题,请参阅。提供的解决方案,如果需要使用JOptionPane:
import java.awt.*;
import javax.swing.*;
public class Main extends JFrame {
private static JTextField nameField = new JTextField(20);
private static JTextField surnameField = new JTextField();
private static JTextField addr1Field = new JTextField();
private static JTextField addr2Field = new JTextField();
private static JComboBox sizes = new JComboBox(new String[] { "small", "medium", "large", "extra-large" });
public Main(){
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
getContentPane().add(mainPanel);
JPanel addrPanel = new JPanel(new GridLayout(0, 1));
addrPanel.setBorder(BorderFactory.createTitledBorder("Receiver"));
addrPanel.add(new JLabel("Name"));
addrPanel.add(nameField);
addrPanel.add(new JLabel("Surname"));
addrPanel.add(surnameField);
addrPanel.add(new JLabel("Address 1"));
addrPanel.add(addr1Field);
addrPanel.add(new JLabel("Address 2"));
addrPanel.add(addr2Field);
mainPanel.add(addrPanel);
mainPanel.add(new JLabel(" "));
mainPanel.add(sizes);
String[] buttons = { "OK", "Cancel"};
int c = JOptionPane.showOptionDialog(
null,
mainPanel,
"My Panel",
JOptionPane.DEFAULT_OPTION,
JOptionPane.PLAIN_MESSAGE,
null,
buttons,
buttons[0]
);
if(c ==0){
new Envelope(nameField.getText(), surnameField.getText(), addr1Field.getText()
, addr2Field.getText(), sizes.getSelectedIndex());
}
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
public static void main(String[] args) {
new Main();
}
}
+1但是如果没有添加新行为(即重新实现
paintComponent
方法)并且简单的组合就足够了,那么就不应该继承类。ieJDialog d=新的JDialog(帧,“信封寻址”);d、 在此处添加(新JLabel(“Name”);…等
相同的内容。如果可能,则无需扩展JFrame:JFrame frame=new JFrame();…;frame.getContentPane().add(主面板);继承是最强大的耦合形式。在owca提出建议前7个小时,我建议使用JOptionPane。我知道你期望得到填鸭式的代码。很高兴知道,我以后不会费心帮忙了。为什么人们在完全不必要的情况下继续填鸭式地输入代码?所发生的一切是Mike不必考虑n他自己的,现在用一个后续问题占用了我们宝贵的时间:stackoverflow.com/questions/2926182/…这就是当你输入简单代码时会发生的情况。没有学习的动机