开发者

JComboBox within a JRadioButton

开发者 https://www.devze.com 2023-02-06 21:32 出处:网络
Say I wanted to add a JComboBox (or more general a JPanel, perhaps?) to a JRadioButton, what would be the easiest way to do it?

Say I wanted to add a JComboBox (or more general a JPanel, perhaps?) to a JRadioButton, what would be the easiest way to do it?

Pseudo-wise, a radio button grou开发者_如何学JAVAp where one of them includes multiple choices would look something like:

O The weather

O Parties

O {meta, pseudo}-science

O Animals

where the {} would be a dropdown list. The trick here is that if one clicks either the dropdown list or the label '-science' the radio button would be actived and showing the UI border and all of that fancy stuff.

Thanks :)


I hate giving answers like this, but in this case I feel it is best...

This seems like a very non-standard UI component. It would be much better UX if you just did:

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

Users will not be familiar with the type of component you are proposing, and it is very inconsistent with the other options in the list. I highly recommend using a more standard convention.


Against my better judgement, I present you with ComboBoxRadioButton:
It is not complete, nor do I suggest using it, but it looks like what you want.

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);
    }
}


I like Justin's answer, but another alternate suggestion:

Put all the options in a single JComboBox.

If you really want to want to take the route from your question it is possible. The best way to achieve this will be to:

  • Create a JPanel that has a JRadioButton on the left, Combo in the middle and label to the right.
  • Add a mouse listener to catch clicks on the panel.
  • Tweak the border, layout, and possibly other UI items to make it look nice.
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号