2

假设我想将 a JComboBox(或更一般的 a JPanel,也许?)添加到 a JRadioButton,最简单的方法是什么?

伪明智地,其中一个包含多个选项的单选按钮组看起来像:

O 天气
O 派对
O {meta, pseudo}-科学
O 动物

其中 {} 将是一个下拉列表。这里的技巧是,如果单击下拉列表或标签“-science”,单选按钮将被激活并显示 UI 边框和所有这些花哨的东西。

谢谢 :)

4

2 回答 2

3

我讨厌给出这样的答案,但在这种情况下,我觉得最好......

这似乎是一个非常非标准的 UI 组件。如果您只是这样做,那将是更好的用户体验:

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);
    }
}
于 2011-01-27T15:43:11.253 回答
0

我喜欢贾斯汀的回答,但另一个建议是:

将所有选项放在一个 JComboBox 中。

如果你真的想从你的问题中走出来,这是可能的。实现这一目标的最佳方法是:

  • 创建一个 JPanel,左边有一个 JRadioButton,中间有一个 Combo,右边有一个标签。
  • 添加鼠标侦听器以捕获面板上的点击。
  • 调整边框、布局和可能的其他 UI 项,使其看起来不错。
于 2011-01-27T15:59:47.237 回答