【问题标题】:Java Swing paint() not workingJava Swingpaint()不起作用
【发布时间】:2012-10-06 12:36:20
【问题描述】:

我写了一个简单的Swing Frame:

public class super_paint extends JFrame{
private JButton jt;
public super_paint()
{
    jt=new JButton("Hello");
    jt.setSize(20,10);

    Container container=getContentPane();
    this.add(jt);

}
@Override
public void paint(Graphics g) {
    // TODO Auto-generated method stub
    super.paint(g);
    g.setColor(Color.red);
    g.draw3DRect(10,10,100,100,true);
    g.setColor(Color.green);
    g.fillOval(50,10,60,60);
     g.drawString("A myFrame object", 10, 50 );
}

以下是测试类:

public class super_paint_Test {
public static void main(String[] args)
{
    JFrame t=new super_paint();
    t.setSize(300,300);
    t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    t.setVisible(true);
}    

}

显示Jframe时,paint()所做的(如drawRect())不显示。但是,当我更改 jframe 的大小时,它会显示出来。

代码sn-ps有什么问题?

【问题讨论】:

  • this.add(jt); 应该是this.add(jt); this.pack();
  • 请学习java命名约定并遵守它们。

标签: java swing jframe


【解决方案1】:

问题是为JButton 完成的绘制“覆盖”了您在paint() 方法中已经完成的自定义绘制。

我将创建另一个自定义JComponent 子类并将此绘制功能放在那里。也最好使用paintComponent

【讨论】:

  • +1 - 但今天没有投票(今天早上在这里下雨:-)
  • @kleopatra 这里是炎热和阳光明媚的日子,明天...... :-)
猜你喜欢
  • 2014-11-23
  • 2017-08-26
  • 2016-08-28
  • 2012-07-21
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多