JOptionPane将'options'参数中的组件显示为Component.toString()

时间:2011-03-24 21:49:40

标签: java joptionpane

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

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.toString()返回值而不是JButton。我也尝试过JLabel和Label。根据{{​​3}},JButtons应该按原样添加到对话框中,因为它们是组件。如果我将JButton添加到'message'参数,它会按预期显示。

知道我做错了吗?

2 个答案:

答案 0 :(得分:0)

showInputDialog中的字符串数组应该不是jbutton(possibilites)数组,但是这样你就不会有背景颜色了。我不认为在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]);

答案 1 :(得分:0)

Java API在这一点上略显不清楚。在顶部描述了如何解释options,但options是YES,NO,CANCEL ......用户可以选择的可能性,画在按钮行中。您在谈论selectionValues,然后明确API(转到最后一个名为showInputDialog的方法):

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

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

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