我正在尝试绘制多条鱼(非常简单的鱼),就像用户指定的那样多。但是当用户指定他们想要绘制多条鱼时,圆圈不会在适当的位置绘制。所有椭圆形都是绘制的,它们不在正确的位置,因此它们看起来不再像鱼一样。
public class FishList extends JPanel {
static int fn = Integer.parseInt(JOptionPane.showInputDialog(null, "How many fish would you like to draw? "));
static int w = 200;
static int h = 100;
static int x;
static int y;
static int a = x + 20;
static int b = y + 30;
static int d = 50;
static int c = x + 195;
public FishList() {
setPreferredSize(
new Dimension(400,400));
}
public void paint(Graphics g) {
g.setColor(Color.GREEN);
g.fillOval(x, y, w, h);
g.fillOval(c, y, d, h);
g.setColor(Color.BLACK);
g.fillOval(a, b, 25, 25);
}
public static void main(String[] args) {
MyFrame frame1 = new MyFrame("Drawing Fish");
JPanel outer = new JPanel();
for(int i=0; i<fn; i++){
x = 0 + (i*(w+d+1));
y = 0;
FishList sPanel1 = new FishList();
outer.add(sPanel1);
}
frame1.add(outer);
frame1.pack();
frame1.setVisible(true);
}
}
答案 0 :(得分:2)
JPanel
使用FlowLayout
。 FlowLayout
还使用组件的首选大小来确定如何在Container
中布局每个组件。
未能致电super.paint
会导致严重问题。实际上,您应该使用paintComponent
代替paint
,并确保拨打super.paintComponent
。
请查看Performing Custom Painting和Painting in AWT and Swing了解详情
组件已经具有位置感和大小感,您忽略了这一点。在这种情况下使用static
变量不会有帮助,因为基本上,你的鱼的每个实例都将绘制在完全相同的位置,因为它们将共享每个{{1}的相同值。 1}}变量......
更好的解决方案是生成一个能够开始绘制的类,然后绘制“鱼”。
这些将包含在能够绘制它们的组件中,然后您可以将其添加到使用static
的{{1}}。
例如......
Container