我的主类扩展了JFrame,并有一个包含图形组件的JPanel,以前我有以下代码:
public class StartGUI extends JFrame implements ActionListener {
public StartGUI {
graphArea = new JPanel() {
public void paintComponent(Graphics g) {
super.paintComponent(g);
drawNetwork(myNetwork, this, g);
}
};
add(graphArea);
}
但是现在我希望将图形区域更改为仅在我按下 JButton 后显示,我将如何移动此 JPanel 以在 actionPerforming 方法中更新绘图网络?
public void actionPerformed(ActionEvent e) {
if(e.getSource() == readButton) {
graphArea = new JPanel() {
public void paintComponent(Graphics g) {
super.paintComponent(g);
drawNetwork(myNetwork, this, g);
}
};
}
以上似乎不起作用,我将如何解决这个问题?
据我从您的评论中了解到的那样,您只需要将模型(myNetwork)和视图(graphArea)分开即可。
创建并添加图形区域,但
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (myNetwork!=null) {
drawNetwork(myNetwork, this, g);
}
}
首先,网络为空(或者可能是一些isInitialized()检查)。一旦选择了文件并创建了网络,只需调用graphArea .repaint()即可反映模型更改。
你创建新的 graphArea JPanel,但不把它添加到任何容器。在旧代码中,您有一个新代码中缺少的调用add(graphArea);
。