java - 正确使用repaint()方法

标签 java eclipse swing paintcomponent repaint

我有一个按钮,当按下该按钮时,会调用另一个类中完成一些绘图的 Changecolor() 方法。按钮监听器工作正常,我从一些日志记录中看到颜色实际上已更改,但我的绘图未更新。这是我当前的实现:

(单击按钮时调用此方法)

public void changeWarningLightColor(){
    System.out.println("change color method called");
    if(warningLights.equals(Color.GREEN)){
        warningLights=Color.RED;
        System.out.println(warningLights);
        repaint();  
    }
    else{
        warningLights=Color.GREEN;
        repaint();  
    }
}

我的绘图是在上述方法的同一文件中创建的,如下所示:

@Override
protected void paintComponent(Graphics g){
    super.paintComponent(g);
            g.drawSomething();
            //draw a bunch of lines
}

我的问题是调用 repaint() 以便实际更新绘图的正确方法是什么?我需要以某种方式调用 g.repaint() 或做一些不同的事情吗?

创建框架的单独类:

public class MainWindow extends JFrame {

public MainWindow(){
    JPanel Window = new JPanel(); 
    JPanel LeftSidePanel = new JPanel();
    LeftSidePanel.setLayout(new BorderLayout());

    LeftSidePanel.add(new DrawStatus(),BorderLayout.CENTER); //where the drawing is added

    Window.setLayout(new BoxLayout(Window,0));
    Window.add(LeftSidePanel);

    add(Window);    

}

public static void main(String[] args)  {
    //main method for showing the frame we created with the panels, and circles inside it 
    MainWindow frame = new MainWindow();
    frame.setSize((int) (.75*Toolkit.getDefaultToolkit().getScreenSize().getWidth()),(int) (.75*Toolkit.getDefaultToolkit().getScreenSize().getHeight()));
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    frame.setTitle("DVPWS v1.0");
    frame.setResizable(false);

    MenuBar menu = new MenuBar();
    frame.setJMenuBar(menu);
    frame.setVisible(true);


}



}

最佳答案

如果您使用 Jframe(很可能是),请执行以下操作

    yourFrame.repaint();

可选

    yourPanel.repaint();

关于java - 正确使用repaint()方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22519169/

相关文章:

java - 在选项卡式窗口中显示输出

java - 如何将 ActioListener 添加到 MVC 中的 JFileChooser

java - 如何使用变量的参数来执行包含集合的映射的方法

java - 如果不是在本地方法中创建,什么时候会清除本地引用?

java - 抛出 ClassCastException

Java断言打印

java - 如何使用JAVA在mongoDB中实现分组功能

java - 在 Hyperledger Fabric V1.0 的本地开发环境中使用 REST API 支持

java - 当我打印它们时,值不会改变

java - JComboBox getSelectedItem() 没有改变