如何在Java中制作弹出窗口

38

我目前正在开发一个Java应用程序。

我想展示一个包含文本区域和按钮的新窗口。

你有什么想法吗?


6
也许是 JOptionPane.showInputDialog(null, "这是消息", "这是默认文本") - fireshadow52
1
请标记一个答案,以便解决此问题。 - Ungeheuer
@NoName 我猜不是。他仍然很活跃...上次出现是3月6日。虽然有一段时间了,但仍然如此。 - Ungeheuer
6个回答

40

相同的答案:使用JOptionPane并提供示例 :)

package experiments;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class CreateDialogFromOptionPane {

    public static void main(final String[] args) {
        final JFrame parent = new JFrame();
        JButton button = new JButton();

        button.setText("Click me to show dialog!");
        parent.add(button);
        parent.pack();
        parent.setVisible(true);

        button.addActionListener(new java.awt.event.ActionListener() {
            @Override
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                String name = JOptionPane.showInputDialog(parent,
                        "What is your name?", null);
            }
        });
    }
}

输入图像描述


14

据我所记,如果你想要一个自定义的窗口,你只需创建一个新的框架并像主窗口一样显示即可。

Java还有一个很棒的对话框库,你可以在这里查看:如何制作对话框,使用它可能会以更少的努力提供你需要的功能。

Object[] possibilities = {"ham", "spam", "yam"};
String s = (String)JOptionPane.showInputDialog(
                    frame,
                    "Complete the sentence:\n"
                    + "\"Green eggs and...\"",
                    "Customized Dialog",
                    JOptionPane.PLAIN_MESSAGE,
                    icon,
                    possibilities,
                    "ham");

//If a string was returned, say so.
if ((s != null) && (s.length() > 0)) {
    setLabel("Green eggs and... " + s + "!");
    return;
}

//If you're here, the return value was null/empty.
setLabel("Come on, finish the sentence!");

如果你不介意限制用户的选择,你可以使用showInputDialog方法的某个较少参数的形式,或者将对象数组指定为null。在Java外观中,将可能性替换为null会导致对话框具有文本字段并且看起来像这样:


我想做新的框架,你能教我怎么做吗?顺便说一下,谢谢。 - Carlo
我上面提供的示例已经尽可能清晰简洁地向您展示了如何操作。如果您想在此基础上进行更多定制,请查看Java文档。 - kreynolds

4

1
大约11年后,此处链接的网站已经关闭。为了节省其他人的时间,这里提供一个Wayback Machine URL到该页面,或者您可以查看maeric的帖子,其中包含Oracle URL。我只是评论一下,考虑到在撰写本评论时,整个问题都是“java open popup”的谷歌搜索结果中排名最高的。 - Severnarch

2

0
尝试使用 JOptionPane 或者 Swt Shell。

0
public class JSONPage {
    Logger log = Logger.getLogger("com.prodapt.autotest.gui.design.EditTestData");


    public static final JFrame JSONFrame = new JFrame();
    public final JPanel jPanel = new JPanel();

    JLabel IdLabel = new JLabel("JSON ID*");
    JLabel DataLabel = new JLabel("JSON Data*");
    JFormattedTextField JId = new JFormattedTextField("Auto Generated");
    JTextArea JData = new JTextArea();
    JButton Cancel = new JButton("Cancel");
    JButton Add = new JButton("Add");

    public void JsonPage() {

        JSONFrame.getContentPane().add(jPanel);
        JSONFrame.add(jPanel);
        JSONFrame.setSize(400, 250);
        JSONFrame.setResizable(false);
        JSONFrame.setVisible(false);
        JSONFrame.setTitle("Add JSON Data");
        JSONFrame.setLocationRelativeTo(null);
        jPanel.setLayout(null);

        JData.setWrapStyleWord(true);
        JId.setEditable(false);

        IdLabel.setBounds(20, 30, 120, 25);
        JId.setBounds(100, 30, 120, 25);
        DataLabel.setBounds(20, 60, 120, 25);
        JData.setBounds(100, 60, 250, 75);
        Cancel.setBounds(80, 170, 80, 30);
        Add.setBounds(280, 170, 50, 30);

        jPanel.add(IdLabel);
        jPanel.add(JId);
        jPanel.add(DataLabel);
        jPanel.add(JData);
        jPanel.add(Cancel);
        jPanel.add(Add);

        SwingUtilities.updateComponentTreeUI(JSONFrame);

        Cancel.addActionListener(new ActionListener() {
            @SuppressWarnings("deprecation")
            @Override
            public void actionPerformed(ActionEvent e) {
                JData.setText("");
                JSONFrame.hide();
                TestCasePage.testCaseFrame.show();
            }
        });

        Add.addActionListener(new ActionListener() {
            @SuppressWarnings("deprecation")
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    PreparedStatement pStatement = DAOHelper.getInstance()
                            .createJSON(
                                    ConnectionClass.getInstance()
                                            .getConnection());
                    pStatement.setString(1, null);
                    if (JData.getText().toString().isEmpty()) {
                        JOptionPane.showMessageDialog(JSONFrame,
                                "Must Enter JSON Path");
                    } else {
                        // System.out.println(eleSelectBy);
                        pStatement.setString(2, JData.getText());
                        pStatement.executeUpdate();
                        JOptionPane.showMessageDialog(JSONFrame, "!! Added !!");
                        log.info("JSON Path Added"+JData);
                        JData.setText("");
                        JSONFrame.hide();
                    }

                } catch (SQLException e1) {
                    JData.setText("");
                    log.info("Error in Adding JSON Path");
                    e1.printStackTrace();
                }
            }
        });
    }

}

9
嗯...有点模糊了,回答问题的边缘了,不是吗 ;-) 无论如何,a) 请学习Java命名规范并遵循它们 b) 永远不要手动调整组件的大小/位置,这是适当的LayoutManager的专属任务 c) 不需要使用updateComponentTree。 - kleopatra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接