JOptionsPane отображает Компоненты в аргументе 'options' как Component.toString () - PullRequest
0 голосов
/ 25 марта 2011

Я пытаюсь открыть диалоговое окно, чтобы позволить пользователю выбрать один из двух цветов в качестве цвета фона.Чтобы это выглядело особенно элегантно, я бы хотел, чтобы в выбранном цвете отображались два варианта, а именно:

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 , JButtons должны быть добавлены в диалог как есть, так как они являются Компонентами.Если я добавлю JButton к параметру 'message', он отобразится, как и ожидалось.

Есть идеи, что я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 25 марта 2011

Java API немного неясен по этому поводу. Вверху описано, как интерпретировать options, но options - это возможности ДА, НЕТ, ОТМЕНА ..., которые пользователь может выбрать, нарисованные в строке кнопок. Вы говорите о selectionValues, и тогда API (перейдите к последнему методу с именем showInputDialog) ясно:

selectionValues - массив объектов, который дает возможные варианты выбора
Пользовательский интерфейс должен решить, как лучше всего представлять selectionValues, но обычно будет использоваться JComboBox, JList или JTextField.

Исходя из моего опыта, объекты, переданные в selectionValues, отображаются с использованием toString(), а результат отображается в JComboBox или JList, поэтому вы не можете отображать значения выбора с помощью пользовательского рисования; для этого вам нужно реализовать собственный диалог.

Вы можете передать message как Component, чтобы вы могли предоставить пользователю легенду о selectionValues, где вы можете показывать метки с фоновыми цветами для обозначения каждого доступного цвета и, таким образом, предоставлять помощь при выборе значения от selectionValues.

0 голосов
/ 25 марта 2011

Должен быть массивом строк, а не массивом jbutton (вариантов) в showInputDialog, но в этом случае у вас не будет цвета фона. Я не думаю, что существует какой-либо способ реализовать такой выбор цвета в 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]);
...