从未调用JPanel子类中的java重写paint()函数?
在我的JPanel子类ChordEditor中重写paint()方法时遇到问题。即使我重写paint()方法,将其添加到框架中,并调用repaint(),也不会调用paint()方法。打印输出“进入油漆功能”不打印。有人能帮我吗
我的ChordEditor类:
public class ChordEditor extends JPanel{
ArrayList<Chord> chordArray = new ArrayList<Chord>();
public ChordEditor() {
this.repaint();
}
@Override
public void paint(Graphics g) {
System.out.println("entering paint function");
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
Toolkit.getDefaultToolkit().sync();
System.out.println("drawing line");
g2d.drawLine(10, 10, 40, 40);
g.dispose();
}
}
我将其添加到JFrame中:
ChordEditor ce = new ChordEditor();
m_frame.getContentPane().removeAll();
m_frame.add(ce);
m_frame.getContentPane().repaint();
# 1 楼答案
在添加组件后立即发出^{} 的事实表明,在已经可见的帧上这样做也许你应该先^{} 帧以下内容适合我:
正如在对您的问题的评论中所述,您应该覆盖^{} 而不是^{} ,并且您不应该调用^{} ,因为您没有创建此图形上下文
对^{} 和^{} 的调用也应该是不必要的,我猜您添加它们是为了解决这个问题。因此,一旦事情对你有利,你可能会移除它们。您还可以考虑将所有组件添加到框架中才能使其可见。这样做会导致隐式验证,这是对包含固定控件配置的windows更常见的方法