JComboBox within a JRadioButton
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 Animalswhere 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.
精彩评论