简体   繁体   中英

Why is graphics not showing on my JFrame / JPanel?

When I run this code. The result is a window with the name. Fully blank. I tried editing background color and adding graphics (rectangle) etc but the same result keeps occurring .

Question: This ends up as a white screen on a window. No graphics or background color. Even though I added it to panel and added panel. How do I fix this?

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();
 }
}

You don't use paintComponent() in a JFrame . What you probably intended to do was create a third class, extending JPanel . Add your paintComponent() there.

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());

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM