0

我试图弹出一个对话框,允许用户选择两种颜色中的一种作为背景颜色。为了让它看起来特别漂亮,我想有两个选择以有问题的颜色显示,即:

import java.awt.Color;
import java.awt.Label;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class JOptionPaneTest extends JFrame{

    public static void main(String[] args) {
        new JOptionPaneTest();
    }

    public JOptionPaneTest() {
        Object[] possibilities = new Object[2];
        JButton black = new JButton("Black");
        JButton white = new JButton("White");
        black.setBackground(Color.black);
        white.setBackground(Color.white);
        black.setForeground(Color.white);
        white.setForeground(Color.black);
        possibilities[0] = black;
        possibilities[1] = white;

        JButton l = (JButton)JOptionPane.showInputDialog(this, 
                "Please specify the background color", "Background check",
                JOptionPane.QUESTION_MESSAGE, null, possibilities,
                possibilities[0]);
        System.out.println("" + l);
    }
}

但是,这不起作用 - 它在下拉列表中而不是 JButton 中显示 JButton.toString() 返回值。我还尝试了 JLabel 和 Label 。根据API,JButtons 应该按原样添加到对话框中,因为它们是组件。如果我将 JButton 添加到“消息”参数,它会按预期显示。

知道我做错了什么吗?

4

2 回答 2

0

应该是字符串数组而不是 showInputDialog 中的 jbutton 数组(可能),但是这样你就没有背景颜色了。我认为不存在在 showInputDialog() 中实现此类颜色选择器的任何方法

String[] str = {"aaa", "bbb"};

JButton l = (JButton)JOptionPane.showInputDialog(this, 
            "Please specify the background color", "Background check",
            JOptionPane.QUESTION_MESSAGE, null, str, str[0]);
于 2011-03-24T21:56:27.277 回答
0

Java API 对这一点有点不清楚。顶部描述了如何解释YES optionsoptionsNO,CANCEL... 用户可以选择的可能性,绘制在按钮行中。您正在谈论selectionValues,然后API(转到名为 的最后一个方法showInputDialog)很清楚:

selectionValues- 提供可能选择的对象数组 由
UI 决定如何最好地表示 selectionValues,但通常会使用 JComboBox、JList 或 JTextField。

根据我的经验,传入的对象selectionValues使用显示toString(),结果显示在 aJComboBox或 aJList中,因此您无法使用自定义绘画显示选择值;您需要为此实现自己的对话框。

您可以将 传递message为 a Component,以便向用户提供有关 的图例selectionValues,您可以在其中显示带有背景颜色的标签以指示每种可用颜色,从而提供从 中选择值的帮助selectionValues

于 2011-03-24T22:07:45.590 回答