Using paintComponent() to draw rectangle in JFrame

怎甘沉沦 提交于 2019-12-01 18:13:14

问题


I'm trying to create a program that draws shapes (a rectangle on the example below) using JPanel's paintComponent(), but I can't get it to work and can't spot what is wrong.

The code is as follows:

import javax.swing.*;
import java.awt.*;

public class RandomRec{
    JFrame frame;

    public void go(){
        frame = new JFrame();
        frame.setSize(500,500);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        DrawPanel panel = new DrawPanel();
    }

    public static void main (String[] args){
        class DrawPanel extends JPanel{
           public void paintComponent(Graphics g) {
              super.paintComponent(g);
              g.setColor(Color.orange);
              g.drawRect(20, 20, 100, 60);
           }
        }

        RandomRec test = new RandomRec();
        test.go();
    }
}

Any help on this would be much appreciated.

Thank you.

*UPDATE* Problem solved! Moving the go() method out of the main method, adding a frame.add(panel) and moving the frame.setVisible(true) to the bottom of the go() method (more specifically, move it after the panel is added to the frame) has sorted the issue. Thank you.


回答1:


Your class DrawPanel is confined to the scope of your main method and is not visible to your constructor.

You need to move DrawPanel out of your main method, then add it to your JFrame:

frame.add(panel);

Also, better to call frame.setVisible(true) after all components have been added.




回答2:


you're never actually adding the panel to the frame, so it is never visible. you need something like

frame.getContentPane().add( panel );

why are you defining the drawpanel class inside the main method? that's rather odd.



来源:https://stackoverflow.com/questions/13404398/using-paintcomponent-to-draw-rectangle-in-jframe

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!