有人会说我为什么不调用PF类的函数paintComponent吗?
public class Fenetre
{
private JFrame jframe;
public Fenetre()
{
jframe = new JFrame(" works");
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.setLayout(new BorderLayout());
jframe.setLocationRelativeTo(null);
jframe.setContentPane(new P());
jframe.pack();
jframe.setVisible(true);
}
public class P extends JComponent
{
public P()
{
this.setPreferredSize(new Dimension(WI,HI));
this.add(new PF());
}
public class PA extends JComponent
{
@Override protected void paintComponent(Graphics g) {
DrawX(g);
DrawY(g);
}
public void DrawX(Graphics g)
{
\* .. */
}
public void DrawY(Graphics g)
{
\* ..*/
}
}
public class PF extends PA
{
@Override protected void paintComponent(Graphics g) {
super.paintComponent(g);
drawS(g);
drawT(g);
}
public void drawS(Graphics g)
{ \* .. */
}
public void drawT(Graphics g)
{
\* ... */
}
}
当我在PF构造函数中设置setSize函数时,它可以工作,但是setPreferredSize也可以工作,但不允许类PF调整大小,也就是说,如果我调整Jframe的大小,则PF绘制不重新调整大小。
希望有人能帮助我,谢谢。
最佳答案
可能的问题可能与PA
和PF
没有首选大小(默认值为0x0)以及默认情况下JComponent
没有布局管理器有关
绘画子系统已确定不需要对子组件进行绘画,因为从技术上讲,子组件在屏幕上不可见
首先设置P
的布局管理器,并覆盖getPreferredSize
的PA
方法。
当您覆盖该方法时,始终调用super.paintComponent
非常重要。当您处理诸如JComponent
之类的透明组件时,这非常重要,因为如果您不这样做,这会引入非常讨厌的绘画瑕疵
关于java - 内部类的paintComponent未调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19529644/