调用paintComponent的正确方法是什么?

时间:2013-11-22 02:03:37

标签: java swing jframe paintcomponent

我是Java GUI的新手,我试图让这个程序在单击按钮时显示正方形。没有任何反应,因为repaint()不适用于paintComponent(Graphics g)。我搜索过,有些人说使用事件调度线程,但我仍然很困惑

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
public class Ham extends JFrame implements ActionListener
{
    JPanel p1;
    JButton b1;
    public Ham(){
        setSize(600, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        p1 = new JPanel();
        b1 = new JButton("Check");
        b1.addActionListener(this);
        p1.add(b1);
        add(p1, BorderLayout.NORTH);
        setVisible(true);
    }

    public void actionPerformed (ActionEvent e){
        if(e.getSource() == b1){
            repaint();
        }
    }
    public void paintComponent(Graphics g){
        g.setColor(Color.BLUE);
        g.fillRect(100,100,50,50);        
    }
}

1 个答案:

答案 0 :(得分:6)

JFrame没有paintComponent()方法。

自定义绘制是通过覆盖paintComponent()(或JComponent)的JPanel方法完成的。您还应该覆盖面板的getPreferredSize()方法以返回合理的值。然后将面板添加到框架中。

然后,您可以在面板上调用repaint(),并调用paintComponent()方法。

阅读Custom Painting上Swing教程中的部分,了解更多信息和示例。