Java 在JPanel的中心添加一个矩形

Java 在JPanel的中心添加一个矩形,java,swing,jpanel,rectangles,Java,Swing,Jpanel,Rectangles,我试图在JPanel的中心画一个矩形。我已经编写了这段代码,但是当我运行它时,矩形不会出现在面板中。如果我尝试使用JFrame,将显示矩形。有人能帮我吗 矩形检测仪 矩形组件 1) 您需要覆盖RectangleComponent的getPreferredSize(),如下所示: @Override public Dimension getPreferredSize() { return new Dimension(box.width+box.x*2,box.hei

我试图在
JPanel
的中心画一个
矩形。我已经编写了这段代码,但是当我运行它时,矩形不会出现在面板中。如果我尝试使用
JFrame
,将显示矩形。有人能帮我吗

矩形检测仪
矩形组件
1) 您需要覆盖
RectangleComponent
getPreferredSize()
,如下所示:

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(box.width+box.x*2,box.height+box.y*2);
    }
2) 在自定义之前,调用
paintComponent()
super.paintComponent(g);
)的
super()
方法

编辑:

公共类矩形组件扩展了JPanel{
专用列表框;
私有整数宽度=30;
私人室内高度=40;
专用int startX=10;
私人int startY=20;
公共矩形组件(){
Box=新的ArrayList();
对于(int i=0;i<3;i++){
添加(新矩形(startX+(宽度+startX)*i,startY,宽度,高度));
}
}
公共组件(图形g){
超级组件(g);
图形2d g2=(图形2d)g;
对于(int i=0;i
您可能需要设置
矩形组件的首选大小,使其在容器中占据适当的空间。如果要在同一JPanel中绘制另一个矩形,该怎么办?
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;

import javax.swing.JPanel;

public class RectangleComponent extends JPanel{

    private Rectangle box;

    public RectangleComponent(){
        box=new Rectangle(10,20,30,40);
    }

      public void paintComponent(Graphics g){
        Graphics2D g2=(Graphics2D) g;
        g2.draw(box);
        g2.setColor(Color.BLUE);
        g2.fill(box);
    }   
}
    @Override
    public Dimension getPreferredSize() {
        return new Dimension(box.width+box.x*2,box.height+box.y*2);
    }
public class RectangleComponent extends JPanel {

        private List<Rectangle> boxes;
        private int width = 30;
        private int height = 40;
        private int startX = 10;
        private int startY = 20;

        public RectangleComponent() {
            boxes = new ArrayList<Rectangle>();
            for (int i = 0; i < 3; i++){
                boxes.add(new Rectangle(startX+(width+startX)*i, startY, width, height));
            }
        }

        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D) g;
            for (int i = 0; i < boxes.size(); i++){
                g2.draw(boxes.get(i));
            }
            g2.setColor(Color.BLUE);
            for (int i = 0; i < boxes.size(); i++){
                g2.fill(boxes.get(i));
            }

        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(boxes.size()*(width+startX)+startX, height+startY*2);
        }

    }