猿问

JPanel重绘问题

JPanel重绘问题

我有一个JFrame,其中包含2个JPanel子类和BorderLayout中的2个JLabel。其中一个JPanel包含JButtons,另一个用于显示图形。JLabels位于北部和南部,西部是JPanel按钮,中间是JPanel。

显示JPanel需要不断刷新,所以我通过swing计时器生成的动作事件调用它的repaint()方法。我也覆盖它的paintComponent()方法来做我的绘图。

而不是显示我绘制的内容,“JFrame的内容”被绘制到显示JPanel上。我知道在完成绘图之前,我可以通过使用g.fillRect()或super.paintComponent()简单地“清除”显示JPanel。

我只是好奇为什么会这样。

我正在使用jdk 1.6u27。下面是我的代码:

package test;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;public class Main {public static void main(String[] args) {
    Simulation sim = new Simulation();

    }}class Simulation extends JFrame {

    public JLabel state;
    private JLabel id;
    private ButtonPanel control;
    private Display display;

    public Simulation() {
        id = new JLabel("Test");
        state = new JLabel("Test");
        control = new ButtonPanel();
        display = new Display(this);

        this.setLayout(new BorderLayout());
        this.add(id, BorderLayout.NORTH);
        this.add(control, BorderLayout.WEST);
        this.add(display, BorderLayout.CENTER);
        this.add(state, BorderLayout.SOUTH);

        this.setSize(500, 600);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    public ButtonPanel getControl() {
        return this.control;
    }}class ButtonPanel extends JPanel implements ActionListener {

    public JButton b[] = new JButton[8];
    public boolean bp[] = new boolean[8];

    public ButtonPanel() {
        this.setLayout(new GridLayout(8, 1));

        for (int i = 0; i < b.length; i++) {
            b[i] = new JButton(""+i);
            b[i].addActionListener(this);
            bp[i] = false;
            this.add(b[i]);
        }
    }
天涯尽头无女友
浏览 646回答 3
3回答

FFIVE

我知道,我不知道有这样的选择,谢谢你的解释。但我的问题实际上是JFrame的内容被绘制到显示JPanel上。例如,顶部标签和侧面按钮被绘制到显示器JPanel上,以及那些黑色线条

宝慕林4294392

一般来说,你应该打电话super.paintComponent(g)或“容器的轻量级后代不会出现。
随时随地看视频慕课网APP

相关分类

Java
我要回答