我的主类扩展了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之后才能显示,我如何在actionPerformed方法中移动这个JPanel来更新drawNetwork?
public void actionPerformed(ActionEvent e) {
if(e.getSource() == readButton) {
graphArea = new JPanel() {
public void paintComponent(Graphics g) {
super.paintComponent(g);
drawNetwork(myNetwork, this, g);
}
};
}
以上似乎不起作用,我该如何解决这个问题?
答案 0 :(得分:2)
我从你的评论中了解到,你需要将模型(myNetwork)和视图(graphArea)分开。
创建并添加graphArea但
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (myNetwork!=null) {
drawNetwork(myNetwork, this, g);
}
}
初始网络为空(或者可能是某些isInitialized()检查)。选择文件并创建网络后,只需调用graphArea .repaint()以反映模型更改。
答案 1 :(得分:0)
您创建新的graphArea JPanel,但不要将其添加到任何容器中。在您的旧代码中,您有一个新代码中缺少的调用add(graphArea);
。