Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JopOptions窗格将“options”参数中的组件显示为Component.toString()_Java_Joptionpane - Fatal编程技术网

Java JopOptions窗格将“options”参数中的组件显示为Component.toString()

Java JopOptions窗格将“options”参数中的组件显示为Component.toString(),java,joptionpane,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 ext

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

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。根据,jbutton应该按原样添加到对话框中,因为它们是组件。如果我将JButton添加到'message'参数中,它会按预期显示


知道我做错了什么吗?

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

JavaAPI对这一点还不太清楚。顶部描述了如何解释选项,但选项有是、否、取消。。。用户可以选择的可能性,绘制在按钮行中。您正在谈论selectionValues,然后名为showInputDialog的转到最后一个方法就很清楚了:

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

根据我的经验,selectionValues中传递的对象使用ToString显示,结果显示在JComboBox或JList中,因此无法使用自定义绘制显示选择值;为此,您需要实现自己的对话框


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

在我链接的API中,它清楚地表明它可以是一组组件、图标、,或者其他任何东西,后者通过toString转换为字符串。组件是按照API添加到对话框中的,因此我发布的代码应该可以工作。对不起,您不应该信任此API。在这个组件中,最重要的是toString方法,不管这是swing对象还是您的对象-所有时候都在调用toString,恕我直言,您引用的文本对我来说并不清楚-没有任何内容表明输入仅限于字符串。如果是,那么将类型字符串[]改为对象[]会更有意义。当然,我的经历和你的一样。