JButton仅在鼠标滑过它后出现

时间:2013-05-13 15:16:25

标签: java swing jbutton paint repaint

我有这个GUI类:

import java.awt.*;
import javax.swing.*;
public class Exp2 extends JFrame {
    public Exp2 () {
        setLayout(new FlowLayout());
        setSize(360, 360);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        JPanel panel1 = new JPanel();
        JPanel panel2 = new JPanel();
        add(panel2);
        add(panel1);
        panel1.paint(null);
        JButton button1 = new JButton("Run");
        panel2.add(button1, BorderLayout.PAGE_END);
    }
    public void paint(Graphics g) {
        g.setColor(Color.green);
        g.fillRect(50, 50, 20, 20);
    }
}

以及这个主要课程:

import javax.swing.JFrame;
class Exp1 extends JFrame {
    public static void main(String[] args) {
        Exp2 box = new Exp2();
    }
}

但JButton button1只有在我将鼠标滚到它应该的位置后才会出现。我做错了什么?

2 个答案:

答案 0 :(得分:4)

你永远不会打电话

super.paint(g);

绘制容器子组件。

不要在JFrame等顶级容器中进行自定义绘画。而是将绘图功能移动到JComponent的子类。覆盖paintComponent而不是paint并调用super.paintComponent(g)。这利用了Swing双缓冲机制的改进性能。

请参阅:Performing Custom Painting

答案 1 :(得分:2)

在添加完所有内容后,在repaint上呼叫JFrame。此外,您需要使用super.paint(g)方法拨打paint