如何在 Java 中添加对话框 (Swing)



可能的重复项:
具有至少两个字段的简单弹出式 Java 表单

我正在尝试制作一个具有多个按钮、输入文本的位置等的对话框。 我正在使用本教程 - http://download.oracle.com/javase/tutorial/uiswing/components/dialog.html,但它没有任何关于拥有多个项目的内容。 有没有办法做到这一点?

许多 showXXXXDialog 方法将 Object 作为参数之一。 如果该对象是字符串,则将显示字符串。 如果该对象是包含按钮、输入字段和其他小部件的容器,则会显示该容器。

引用 http://download.oracle.com/javase/6/docs/api/javax/swing/JOptionPane.html

Parameters:
The parameters to these methods follow consistent patterns:

parentComponent

定义要作为此对话框父级的组件。它 以两种方式使用:框架 包含它用作框架 对话框的父级及其 屏幕坐标用于 对话框的位置。在 常规,对话框仅放置 在组件下方。此参数 可能为 null,在这种情况下为默认值 框架用作父级,并且 对话框将在屏幕上居中 (取决于L&F)。

message

要放置在对话框中的描述性消息。在最常见的 用法,消息只是一个字符串或 字符串常量。但是,类型 此参数实际上是对象。其 解释取决于其类型:

对象[] 对象数组被解释为一系列消息(每个消息一个 对象)以垂直堆叠排列。 解释是递归的—— 数组中的每个对象都是 根据其类型进行解释。

元件 组件将显示在对话框中。

图标 图标包装在 JLabel 中并显示在对话框中。

别人 通过调用其 toString 方法将对象转换为字符串。结果包装在 JLabel 中并显示。

这里有两个选择。要么使用 JOptionPane 方法显示Paul Tomblin详述的对话框,要么构建自己的对话框。

如果您想要对对话框进行细粒度控制,例如,如果您需要不同的名称(也可以通过使用 JOptionPane.showOptionDialog 来完成)或对话框上按钮的位置,或者如果您需要非模式对话框,则第二个选项是必需的。

简单的例子:

import java.awt.Color;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class DialogsTest
{   
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {               
                JPanel p = new JPanel();
                JPanel contentPane = new JPanel();
                contentPane.add(p);
                JFrame f = new JFrame();
                f.setContentPane(contentPane);
                f.setSize(400, 300);
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.setVisible(true);         
                /* 
                 * NOTE: It is not recomended to share the same instance of a component 
                 * by different parents. Thought it is fine here since the first 
                 * dialog will release it before the second will get it.
                 * But in a situation when we wouldn't make the 'dialog' modal and 
                 * we would show it after the 'option pane dialog' it would be empty.
                 */
                JPanel message = new JPanel();
                message.add(new JLabel("Label:"));              
                message.add(new JTextField("ABCD"));
                message.setBackground(Color.GREEN);
                JOptionPane.showConfirmDialog(f, message, "Default made dialog", JOptionPane.YES_NO_OPTION);
                Object[] options = new String[]{"a", "b", "c"};
                JOptionPane.showOptionDialog(f, message, "", JOptionPane.YES_OPTION, JOptionPane.INFORMATION_MESSAGE, 
                        null, options, options[0]);
                JDialog dialog = new JDialog(f, "Custom made dialog");
                dialog.setModal(true);
                dialog.setContentPane(message);
                dialog.pack();
                dialog.setLocationRelativeTo(f);
                dialog.setVisible(true);
            }
        });
    }
}

顺便说一句,您在阅读的 Java 教程中有一个非常好(可能太丰富)的示例。

相关内容

  • 没有找到相关文章