为什么我的JFrame / JPanel上没有显示图形?

时间:2014-08-08 13:53:05

标签: java swing graphics java-7

当我运行此代码时。结果是一个带有名称的窗口。完全空白。我尝试编辑背景颜色并添加图形(矩形)等,但同样的结果仍然存在。

问题:这最终会在窗口上显示为白色屏幕。没有图形或背景颜色。即使我将它添加到面板并添加了面板。我该如何解决这个问题?

Main.java

package ball.tec.main;

import javax.swing.JFrame;
import ball.tec.frame.Frame;

public class Main {
    public static void main(String[] args) {
        String Version = "0.1.2";
        Frame f = new Frame();
        f.setVisible(true);
        f.add();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setResizable(false);
        f.setSize(1500, 1000);
        f.setTitle("RedBall V: " + Version);
    }
}

Frame.java

    package ball.tec.frame;

    import java.awt.Color;
    import java.awt.Graphics;
    import javax.swing.JFrame;
    import javax.swing.JPanel;

    public class Frame extends JFrame{
        private static final long serialVersionUID = 1L;
        public boolean debug = false;

        //Creating panel object
        JPanel panel = new JPanel();

        //Graphics displayed
        public void paintComponent(Graphics g) {

        //Firstly Nothing pops up
        g.setColor(Color.RED);
        g.drawRect(20, 40, 10, 10);

        //And this doesn't work.
        this.setBackground(Color.RED);
    }

    //Add everything to 'panel'
    public void add() {
    add(panel);

    //Even if I put it here it doesn't work ;-;
    this.setBackground(Color.RED);
    this.pack();
 }
}

1 个答案:

答案 0 :(得分:2)

您不能在paintComponent()中使用JFrame。您可能打算做的是创建第三个类,扩展JPanel。在那里添加paintComponent()

public class MyPanel extends JPanel {
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.RED);
        g.drawRect(20, 40, 10, 10);
        this.setBackground(Color.RED);
    }
}

f.add(new MyPanel());