按下按钮时更新JPanel中的图形

时间:2015-03-13 12:41:29

标签: java swing graphics jpanel

我的主类扩展了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);

            }
        };
    }

以上似乎不起作用,我该如何解决这个问题?

2 个答案:

答案 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);