我有一个按钮,当按下时会调用另一个类中的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);
}
}
答案 0 :(得分:1)
如果您正在使用Jframe(最有可能),请执行
yourFrame.repaint();
任选地
yourPanel.repaint();
答案 1 :(得分:0)
在这种情况下你可以做
public MainWindow mw = new MainWindow();
mw.repaint();
如果这不起作用(我有类似的问题),那么你必须制作一个JFrame实例,而不是扩展它。