我正在尝试制作一个包含形状和按钮的面板。问题是,当我向JPanel添加一个按钮时,形状不会出现。它只显示屏幕顶部的按钮。该方块仅在将方块添加到框架而不是面板时显示,但按钮不会出现。
public static void main(String[] args)
{
JFrame frame = new JFrame();
JPanel panel = new JPanel();
//Replace FRAME_WIDTH/HEIGHT with a number greater than 100
frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
frame.setTitle("Square Game");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Creates a Red Square from RedSquare
final RedSquare red = new RedSquare();
panel.add(red);
JButton button = new JButton();
button.setText("Red");
panel.add(button);
frame.add(panel);
frame.setVisible(true);
}
public class RedSquare extends JComponent
{
private Square sq;
private int x = 100;
private int y = 0;
private Graphics2D g2;
public RedSquare()
{
sq = new Square(x,y,Color.red);
}
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
sq.draw(g2);
}
public int getX()
{
return x;
}
public int getY()
{
return y;
}
public void moveBy()
{
y++;
sq = new Square(x,y,Color.red);
repaint();
}
}
public class Square
{
private int x;
private int y;
private Color color;
public Square(int x, int y, Color color)
{
this.x = x;
this.y = y;
this.color = color;
}
public void draw(Graphics2D g2)
{
Rectangle body = new Rectangle(x, y, 40, 40);
g2.draw(body);
g2.setPaint(color);
g2.fill(body);
g2.draw(body);
}
}
我是否需要做其他事情来使这项工作?我错过了什么吗?我是新手,非常感谢任何帮助。
答案 0 :(得分:0)
我认为你必须使用panel.setLayout(new FlowLayout())在面板中设置布局;在将任何内容添加到面板之前,使其显示您的两个形状。因为它现在是压倒一切。
答案 1 :(得分:0)
将组件添加到JFrame时尝试使用setContentPane而不是添加。因此,从上面的示例中,移除frame.add(panel);
并使用frame.setContentPane(panel);
答案 2 :(得分:0)
您正在扩展抽象的JComponent是不寻常的 - 尽管不是禁止的。
一种解决方案是使用JPanel而不是JComponent。
并且将x坐标设置为x = 0将显示正方形。
除此之外,您还可以使用布局等:
panel.setLayout(new BorderLayout());
....
panel.add("Center", red);
.......
panel.add("South", button);