2011-03-24 16 views
0

我试图弹出一个对话框,允许用户选择两种颜色之一作为背景颜色。为了使它看起来特别漂亮,我想两个选择要显示在有问题的颜色,即:JOptionsPane在'options'参数中显示组件作为Component.toString()

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

任何想法我做错了什么?

回答

0

Java的API是性能稍微不清楚这一点。在顶部描述了如何解释options,但是options是用户可以选择的YES,NO,CANCEL ...可能性,绘制在按钮行中。你所谈论的selectionValues,然后API(去命名showInputDialog最后的方法)是明确的:

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

从我的经验,使用toString()显示在selectionValues传递的对象,其结果是在JComboBoxJList显示,所以你不能用油画定制显示选择值;你需要实现你自己的对话框。

您可以通过message作为Component,这样可以提供一个传说有关selectionValues,在那里你可以展示与背景颜色标签来表示每个颜色可选,从而提供assitance从selectionValues选择一个值的用户。

+0

在所有应有的尊重下,你引用的文本对我来说不是很清楚 - 那里没有任何内容表示输入仅限于字符串,如果是,那么使String类型更有意义[]而不是Object []。当然我的经验和你的一样。 – elhefe 2011-03-24 22:23:54

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]); 
+0

在API中,我明确指出它可以是组件,图标或其他任何东西的数组(后者通过toString()转换为字符串,每个API都将对象添加到对话框中,所以我发布的代码应该可以工作 – elhefe 2011-03-24 22:09:14

+0

对不起,但你不相信这个API,在这个组件中最重要的是toString()方法,它是否是摆动对象或对象 - 无所谓调用toString() – smas 2011-03-24 22:24:16