我使用 JFrame 创建并显示一个窗口,只设置了非常基本的属性。
public FrameVertices( String sTitle, Graph mMap, int iMul ) {
super( sTitle );
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
setSize ( 300, 300 );
setLocation ( 600, 300 );
setVisible ( true);
this.iMul = iMul;
this.gGraph = mMap;
}
然后我使用 paint() 方法在窗口内绘制一些东西。
问题是,当一些其他窗口覆盖我的 JFrame
然后再揭开它时,JFrame
的内容不会重新绘制 - 除非我调整大小或最小/最大JFrame
.
我错过了什么吗?
最佳答案
直接绘制到 JFrame
不是好的做法。更好的方法是覆盖 JPanel
中的 paintComponent()
并将 JPanel
添加到 JFrame
:
测试.java:
public class Test extends JFrame {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Test().createUI();
}
});
}
void createUI() {
setSize(500,500);
getContentPane().add(new MyPanel());
setVisible(true);
}
}
我的面板.java:
class MyPanel extends JPanel {
@override
public void paintComponent(Graphics g) {
super.paintComponent(g);
//paint what you want here
g.drawString("Hello world",250,250);
}
}
但是,如果必须的话,我建议添加一个 Window FocusListener
并在 JFrame
实例被引入时调用 repaint()
焦点:http://docs.oracle.com/javase/tutorial/uiswing/events/windowlistener.html
通过方法 windowGainedFocus(WindowEvent e)
或 windowStateChanged(WindowEvent e)
或 windowActivated(WindowEvent e)
调用 repaint( )
其中一个方法将调用 paint()
方法。
关于java - Windows 在重叠时删除 JFrame 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11957107/