JComboBox в JRadioButton - PullRequest
       28

JComboBox в JRadioButton

2 голосов
/ 27 января 2011

Скажите, что я хотел бы добавить JComboBox (или более общее JPanel, возможно?) К JRadioButton, что было бы самым простым способом сделать это?

Псевдо-мудрая группа переключателей, в которой один из них включает несколько вариантов выбора, будет выглядеть примерно так:

о погоде
O Стороны
O {meta, pseudo} -science
О Животные

где {} будет раскрывающимся списком. Хитрость в том, что если щелкнуть раскрывающийся список или ярлык '- science' , то будет активирована радиокнопка, показывающая границу пользовательского интерфейса и все эти причудливые вещи.

Спасибо:)

Ответы [ 2 ]

3 голосов
/ 27 января 2011

Я ненавижу давать такие ответы, но в этом случае я чувствую, что это лучше ...

Это выглядит как очень нестандартный компонент пользовательского интерфейса.Было бы намного лучше UX, если бы вы только что сделали:

O The weather
O Parties
O meta-science
O pseudo-science
O Animals

Пользователи не будут знакомы с типом предлагаемого вами компонента, и это очень несовместимо с другими параметрами в списке.Я настоятельно рекомендую использовать более стандартное соглашение.


Вопреки моему лучшему суждению, я представляю вам ComboBoxRadioButton:
Оно не является полным, и я не предлагаю его использовать, но похожечто хочешь.

import java.awt.FlowLayout;

import javax.swing.AbstractButton;
import javax.swing.ButtonGroup;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JToggleButton;

public class ComboBoxRadioButton extends JRadioButton {

    private JLabel beforeText, afterText;
    private JComboBox comboBox;

    public ComboBoxRadioButton(String beforeTxt, JComboBox comboBox, 
                                             String afterText) {
        this.comboBox = comboBox;
        this.beforeText = new JLabel("    " + beforeTxt);
        this.afterText = new JLabel(afterText);
        comboBox.setSelectedIndex(0);
        setLayout(new FlowLayout());
        setModel(new JToggleButton.ToggleButtonModel());
        add(this.beforeText);
        add(this.comboBox);
        add(this.afterText);
    }

    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel mainPane = new JPanel();
        ButtonGroup group = new ButtonGroup();
        AbstractButton b2 = new JRadioButton("Java Swing");
        AbstractButton b3 = new ComboBoxRadioButton(
                "It's gonna be a", new JComboBox(new String[] { "good", "bad",
                "rainy" }), "day!");
        AbstractButton b4 = new JRadioButton("After the combo");
        group.add(b2);
        group.add(b3);
        group.add(b4);
        mainPane.add(b2);
        mainPane.add(b3);
        mainPane.add(b4);
        f.add(mainPane);
        f.pack();
        f.setVisible(true);
    }
}
0 голосов
/ 27 января 2011

Мне нравится ответ Джастина, но другое альтернативное предложение:

Поместите все опции в один JComboBox.

Если вы действительно хотите выбрать маршрут из вашего вопроса, это возможно.Лучший способ добиться этого:

  • Создать JPanel с JRadioButton слева, Combo посередине и меткой справа.
  • Добавить слушателя мышичтобы ловить щелчки на панели.
  • Настройте границы, макет и, возможно, другие элементы пользовательского интерфейса, чтобы он выглядел красиво.
...