【发布时间】:2016-07-05 09:34:25
【问题描述】:
我正在尝试制作一个应用程序,但目前有点卡在如何整齐地构建我的代码。
为简单起见,假设我想要一个 JFrame,其中包含:
- 一个
JPanel,其中包含一个JComboBox,用户可以在其中选择一个形状(正方形、圆形等)。 - 一个单独的
JPanel,在JComboBox中直观地显示所选形状。
所以我有以下代码:
public class Frame extends JFrame {
Frame() {
ComboBoxPanel comboBoxPanel = new ComboBoxPanel();
ShapePanel shapePanel = new ShapePanel();
this.getContentPane().add(comboBoxPanel, BorderLayout.WEST);
this.getContentPane().add(shapePanel, BorderLayout.CENTER);
this.setResizable(true);
this.pack();
this.setVisible(true);
}
public static void main(String[] args) {
new Frame();
}
}
组合框面板:
public class ComboBoxPanel extends JPanel {
private JComboBox<Shape> comboBox;
ComboBoxPanel() {
comboBox = new JComboBox<Shape>(Shape.SHAPES);
this.add(comboBox);
comboBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
// Here I want to repaint the shapePanel
}
}
});
}
}
最后,ShapePanel 看起来像:
public class ShapePanel extends JPanel {
@Override
public void paintComponent(Graphics g) {
// Get selected Shape from JComboBox and draw it
}
}
简而言之,我怎样才能让这两个同级组件以一种简洁的方式相互交互?我已经想到了一些解决方案,但它们看起来真的很脏。欢迎任何想法。
谢谢。
【问题讨论】:
-
如果您有兴趣了解如何实现该模式,可以查看我的解决方案。
标签: java swing components