use*_*888 1 java swing paint jframe paintcomponent
我创建了一个测试版本来简化我为你们提出的问题:
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Test extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
JLabel l = new JLabel("hello");
JPanel cp;
public Test(){
setContentPane(cp = new JPanel());
cp.add(l);
setSize(200, 200);
setVisible(true);
}
public void paint(Graphics g){
//do absolutely nothing
}
}
Run Code Online (Sandbox Code Playgroud)
当你启动程序时,你会看到一个完美的空白窗口.但是,如果删除paint方法,JLabel会显示出来!(我不得不长时间搜索这个bug,真的).现在,我如何启用一个窗口来使用图形和定期绘制组件?提前致谢
1)你不应该忽略paint(..)的JFrame,除非你有一个特定的目的.
在Swing中绘制的正确方法是:
JPanel到JFrameJPanel,覆盖paintComponent(..)并getPreferredSize()返回Dimension适合我们绘图的正确s.NB不要忘记super.paintComponent(g)在重写paintComponent方法中调用第一个调用以表示绘制链看到我的这个答案,其中有几个例子.
JFrame不必要的时间.setSize上JFrame,而用正确的LayoutManager和/或重写getPreferredSize()-通常在做JPanel的时候,我们是直接绘制或JPanel将没有大小,如果没有添加成分,如果他们是因为它需要适应成分也只会是大和不是形象.pack()上JFrame设置它可见之前.只是看看Swing中的Concurrency,尤其是Event-Dispatch-Thread
| 归档时间: |
|
| 查看次数: |
166 次 |
| 最近记录: |