1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| public class TabSwitcher {
public static void gui() {
final Map<String, String> values = new LinkedHashMap<String, String>();
values.put("pane1", "Pane 1");
values.put("pane2", "Pane 2");
JComboBox combobox = new JComboBox(values.keySet().toArray());
final CardLayout layout = new CardLayout();
final JPanel pane = new JPanel(layout);
for (Entry<String, String> entry : values.entrySet()) {
//TODO Build component based on value
Component component = new JLabel(entry.getValue());
pane.add(component, entry.getKey());
}
// Modifies renderer to prefix value by "Show " (ie "Show Pane 1").
combobox.setRenderer(new BasicComboBoxRenderer() {
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus)
{
return super.getListCellRendererComponent(list, "Show " + values.get(value), index, isSelected,
cellHasFocus);
}
});
// Synchronizes combobox and switched pane
combobox.addItemListener(new ItemListener()
{
@Override
public void itemStateChanged(ItemEvent e)
{
if (e.getStateChange() == ItemEvent.SELECTED)
{
layout.show(pane, String.valueOf(e.getItem()));
}
}
});
layout.show(pane, String.valueOf(combobox.getSelectedItem()));
// Show result
JFrame frame = new JFrame();
frame.getContentPane().add(combobox, BorderLayout.PAGE_START);
frame.getContentPane().add(pane, BorderLayout.CENTER);
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.setSize(640, 480);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
gui();
}
});
}
} |
Partager