如何在JOptionPane和JDialogs上垂直堆叠按钮?

4
我正在尝试使用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);

    }

}
2个回答

11
如果你想要将按钮垂直排列,需要将它们添加到一个面板中,然后将该面板添加到选项面板中,像这样:
    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);

我不确定除了手动浏览JOptionPane的内容并将其删除之外,你如何摆脱OK按钮。但是,你可以创建自己的JDialog,这样你就完全控制了,但是获取漂亮的joption面板图标需要更多的工作 :)


要删除“确定”按钮,您可以在将面板添加到选项窗格之前放置此行代码optionPane.remove(1);。它会从选项窗格中删除索引为1的组件,这种情况下是“确定”按钮。 - Bugs - not a bug

1

我们可以通过轻微的修改来去掉“确定”按钮。

        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);

当您将面板添加到选项窗格时,只需指定位置(在此情况下为1:这意味着在中间)。因此,“确定”按钮向下移动。


这并不会去掉“确定”按钮,只是将其向下移动。 - Torque

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