Java 如何使用JDialogs在JOptionPane上垂直堆叠按钮?

Java 如何使用JDialogs在JOptionPane上垂直堆叠按钮?,java,user-interface,swing,Java,User Interface,Swing,我正在尝试使用createDialog将三个按钮垂直堆叠到JOptionPane上,但它在GridLayout中不太起作用。另外,我也不知道如何去掉“OK”按钮。你可能想知道我为什么这样做,但这是我被告知的方式。我想我可以使用JFrame,但我不认为它与JOptionPane配合得很好,因为我想在那里堆叠按钮 应该是这样的: |需要帮助| |帮帮我| |计数| 我需要可访问性,以便在某个时候添加动作侦听器,但在我达到这一点之前,这似乎变得复杂起来 import java.awt.Containe

我正在尝试使用createDialog将三个按钮垂直堆叠到JOptionPane上,但它在GridLayout中不太起作用。另外,我也不知道如何去掉“OK”按钮。你可能想知道我为什么这样做,但这是我被告知的方式。我想我可以使用JFrame,但我不认为它与JOptionPane配合得很好,因为我想在那里堆叠按钮

应该是这样的:
|需要帮助|
|帮帮我|
|计数|

我需要可访问性,以便在某个时候添加动作侦听器,但在我达到这一点之前,这似乎变得复杂起来

import java.awt.Container;
import java.awt.GridLayout;

import javax.swing.*;
public class ThreeButtons {

    static JDialog dialog;
    public static void main(String[] args) {

        JOptionPane optionPane = new JOptionPane();
        optionPane.setMessage("Set Message");
        optionPane.setMessageType(JOptionPane.INFORMATION_MESSAGE);
        optionPane.setLayout(new GridLayout(3,1));
        String[] buttonTxt = {"Need Help","Help Me","Counting"};
        JButton[] buttons = new JButton[buttonTxt.length];
        for (int i = 0; i < buttonTxt.length; i++)
        {
            buttons[i] = new JButton(buttonTxt[i]); 
            optionPane.add(buttons[i]);
        }
        dialog = optionPane.createDialog(null, "Icon/Text Button");
        dialog.setVisible(true);

    }

}
导入java.awt.Container;
导入java.awt.GridLayout;
导入javax.swing.*;
公共类三按钮{
静态JDialog对话框;
公共静态void main(字符串[]args){
JOptionPane optionPane=新的JOptionPane();
optionPane.setMessage(“设置消息”);
optionPane.setMessageType(JOptionPane.INFORMATION\u消息);
optionPane.setLayout(新的GridLayout(3,1));
String[]ButtonText={“需要帮助”、“帮助我”、“计数”};
JButton[]buttons=新JButton[buttonText.length];
对于(int i=0;i
如果要堆叠按钮,需要将其添加到面板中,并将面板添加到选项窗格中,如下所示:

    JDialog dialog = null;
    JOptionPane optionPane = new JOptionPane();
    optionPane.setMessage("Set Message");
    optionPane.setMessageType(JOptionPane.INFORMATION_MESSAGE);

    JPanel panel = new JPanel();
    panel.setLayout(new GridLayout(3,1));
    String[] buttonTxt = {"Need Help","Help Me","Counting"};
    JButton[] buttons = new JButton[buttonTxt.length];
    for (int i = 0; i < buttonTxt.length; i++)
    {
        buttons[i] = new JButton(buttonTxt[i]);
        panel.add(buttons[i]);
    }
    optionPane.setOptionType(JOptionPane.DEFAULT_OPTION);
    optionPane.add(panel);
    dialog = optionPane.createDialog(null, "Icon/Text Button");
    dialog.setVisible(true);
JDialog对话框=null;
JOptionPane optionPane=新的JOptionPane();
optionPane.setMessage(“设置消息”);
optionPane.setMessageType(JOptionPane.INFORMATION\u消息);
JPanel面板=新的JPanel();
面板设置布局(新网格布局(3,1));
String[]ButtonText={“需要帮助”、“帮助我”、“计数”};
JButton[]buttons=新JButton[buttonText.length];
对于(int i=0;i

除了手动浏览JOptionPane的内容并删除它之外,我不知道如何去掉OK按钮。你可以创建自己的JDialog,然后你就可以完全控制了,但是要获得漂亮的选项窗格图标需要做更多的工作:)

我们只需稍加修改就可以去掉“OK”按钮

        JDialog dialog = null;
        JOptionPane optionPane = new JOptionPane();
        optionPane.setMessage("Set Message");
        optionPane.setMessageType(JOptionPane.INFORMATION_MESSAGE);

        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(3,1));
        String[] buttonTxt = {"Need Help","Help Me","Counting"};
        JButton[] buttons = new JButton[buttonTxt.length];
        for (int i = 0; i < buttonTxt.length; i++)
        {
            buttons[i] = new JButton(buttonTxt[i]);
            panel.add(buttons[i]);
        }
        optionPane.setOptionType(JOptionPane.DEFAULT_OPTION);
        optionPane.add(panel,1);
        dialog = optionPane.createDialog(null, "Icon/Text Button");
        dialog.setVisible(true);
JDialog对话框=null;
JOptionPane optionPane=新的JOptionPane();
optionPane.setMessage(“设置消息”);
optionPane.setMessageType(JOptionPane.INFORMATION\u消息);
JPanel面板=新的JPanel();
面板设置布局(新网格布局(3,1));
String[]ButtonText={“需要帮助”、“帮助我”、“计数”};
JButton[]buttons=新JButton[buttonText.length];
对于(int i=0;i

当您将面板添加到选项窗格时,只需指定位置(在本例中为1:表示在中间)。因此“确定”按钮将按下。

没问题。现在给我一个大的投票,并标记为正确答案。:)要删除“确定”按钮,您可以将这行代码放入“选项窗格”。删除(1)。它从optionPane中删除索引1处的组件,在本例中是Ok按钮。这并没有删除Ok按钮,它只是将其向下移动。