Java Can';在JFrame中看不到一个组件

Java Can';在JFrame中看不到一个组件,java,jframe,Java,Jframe,这是我的代码,并不复杂。但是当我试图画两个组件时,窗口只画一个。这段代码,当我去掉第一个组件时,窗口将绘制第二个组件。我在javadocs中查找了JFrame.add方法,但没有找到错误所在,请帮助我。问题是您使用的是JFrame的默认布局管理器,它是BorderLayout。当您添加第二个组件时,它将替换第一个组件。(两者都添加到中心单元格。) 如果您想使用组件来显示方框,我建议您将其布局为不重叠 否则,我建议您在同一组件上绘制所有框。问题是您使用的是JFrame的默认布局管理器,它是边界布局

这是我的代码,并不复杂。但是当我试图画两个组件时,窗口只画一个。这段代码,当我去掉第一个组件时,窗口将绘制第二个组件。我在javadocs中查找了JFrame.add方法,但没有找到错误所在,请帮助我。问题是您使用的是
JFrame
的默认布局管理器,它是
BorderLayout
。当您添加第二个组件时,它将替换第一个组件。(两者都添加到
中心
单元格。)

如果您想使用组件来显示方框,我建议您将其布局为不重叠


否则,我建议您在同一组件上绘制所有框。

问题是您使用的是
JFrame
的默认布局管理器,它是
边界布局。当您添加第二个组件时,它将替换第一个组件。(两者都添加到
中心
单元格。)

如果您想使用组件来显示方框,我建议您将其布局为不重叠

否则,我建议您在同一组件上绘制所有框

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

public class Box {
    public static void main(String[] args){
        BoxFrame frame = new BoxFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

class BoxFrame extends JFrame{
    public BoxFrame(){
        setTitle("BoxGame");
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
        DrawComponent[] component = new DrawComponent[4];
        component[0] = new DrawComponent(0, 0, 20, 20);
        component[1] = new DrawComponent(400, 0, 20, 20);

        add(component[0]);
        add(component[1]);//here the problem is
    }
    public static final int DEFAULT_WIDTH = 600;
    public static final int DEFAULT_HEIGHT = 400;
}

class DrawComponent extends JComponent{
    private double left;
    private double top;
    private double width;
    private double height;
    public DrawComponent(double l, double t, double w, double h){
        left = l;
        top = t;
        width = w;
        height = h;
    }
    public void paintComponent(Graphics g){
        Graphics2D g2 = (Graphics2D) g;
        Rectangle2D rect = new Rectangle2D.Double(left, top, width, height);
        g2.draw(rect);
        g2.setPaint(Color.BLUE);
        g2.fill(rect);
    }
}