#java #jframe
#java #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);
}
}
вот мой код, он не сложный. но когда я пытаюсь нарисовать два компонента, в окне отображается только один. этот фрагмент кода, когда я избавляюсь от первого компонента, в окне отображается второй. и я просмотрел метод JFrame.add в javadocs, но не нашел, в чем ошибка, пожалуйста, помогите мне
Ответ №1:
Проблема в том, что вы используете менеджер компоновки по умолчанию JFrame
, который является a BorderLayout
. Когда вы add
создадите свой второй компонент, он заменит первый. (Оба добавляются в CENTER
ячейку.)
Если вы хотите использовать компоненты для отображения полей, я предлагаю вам разместить их без перекрытия.
В противном случае я бы посоветовал вам нарисовать все поля для одного и того же компонента.