按下按钮时更新 JPanel 中的图形
Updating graphics in JPanel when button is pressed
我的主要 class 扩展了 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 以在 actionPerformed 方法中更新 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);
}
};
}
以上似乎不起作用,我该如何解决?
您创建了新的 graphArea JPanel,但没有将它添加到任何容器中。在您的旧代码中,您有一个调用 add(graphArea);
,新代码中缺少该调用。
据我从您的评论中了解到,您只需要分离模型 (myNetwork) 和视图 (graphArea)。
创建并添加 graphArea 但
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (myNetwork!=null) {
drawNetwork(myNetwork, this, g);
}
}
最初网络为空(或者它可能是一些 isInitialized() 检查)。选择文件并创建网络后,只需调用 graphArea .repaint() 即可反映模型更改。
我的主要 class 扩展了 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 以在 actionPerformed 方法中更新 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);
}
};
}
以上似乎不起作用,我该如何解决?
您创建了新的 graphArea JPanel,但没有将它添加到任何容器中。在您的旧代码中,您有一个调用 add(graphArea);
,新代码中缺少该调用。
据我从您的评论中了解到,您只需要分离模型 (myNetwork) 和视图 (graphArea)。
创建并添加 graphArea 但
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (myNetwork!=null) {
drawNetwork(myNetwork, this, g);
}
}
最初网络为空(或者它可能是一些 isInitialized() 检查)。选择文件并创建网络后,只需调用 graphArea .repaint() 即可反映模型更改。