我需要创建一个在JFrame或JPanel上显示多个矩形的程序。这是我到目前为止想出的代码:
import javax.swing.*;
import java.util.Random;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class RandomRectangles extends JFrame {
private static final int FRAME_HEIGHT = 300;
private static final int FRAME_WIDTH = 250;
private JButton fewer;
private JButton more;
private Random generator = new Random();
private int count;
private JPanel display;
private JPanel panel;
public RandomRectangles()
{
count = generator.nextInt(100);
setSize(FRAME_WIDTH, FRAME_HEIGHT);
this.setTitle("Random Rectangles");
display = new JPanel(new BorderLayout());
setLayout(new BorderLayout());
//display = new JPanel(new GridLayout(2,2));
JPanel buttons = new JPanel();
fewer = new JButton("Fewer");
more = new JButton("More");
buttons.add(fewer);
buttons.add(more);
class fewerNum implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
count = count / 2;
}
}
ActionListener listener = new fewerNum();
fewer.addActionListener(listener);
class moreNum implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
count = count * 2;
}
}
ActionListener listener2 = new moreNum();
more.addActionListener(listener2);
for (int i = 0; i <= count; i++)
{
// display.add(new RectangleComponent());
add(new RectangleComponent());
}
//add(display, BorderLayout.CENTER);
add(buttons, BorderLayout.SOUTH);
}
}上面的代码可以编译,但有几个缺陷。单击这些按钮时,不会执行任何操作,而是将RectangleComponent对象添加到框架或面板中。我还创建了一个单独的RectangleComponent类来绘制rectangle对象
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.util.Random;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class RectangleComponent extends JComponent{
private Random generator = new Random();
private int xLeft;
private int yTop;
public RectangleComponent()
{
xLeft = generator.nextInt(100);
yTop = generator.nextInt(100);
}
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
Rectangle rec = new Rectangle(xLeft, yTop, 20, 40);
int amount = generator.nextInt(100);
g2.draw(rec);
}
}我要做的是:编写一个程序,在任意位置显示多个矩形。提供生成更少或更多随机矩形的“较少”和“较多”按钮。用户每点击一次“较少”,计数就会减半。用户每次点击"More“时,计数都会加倍。
发布于 2011-04-06 02:38:02
越来越多的按钮只是设置矩形的数量,而不是添加或删除它们。你必须以某种方式重新创建它们。
如果您只想显示矩形,则不需要创建RectangleComponent -您可以覆盖调用super.paint的JFrame的画图,然后放置和绘制矩形。在这种情况下,您必须在所有ActionListeners中的jframe上添加repaint()。
编辑:更好的想法是添加一个jpanel并只在这个面板上绘制矩形,否则矩形将覆盖在按钮上并在按钮单击后“消失”,请查看此simple demo
发布于 2011-04-06 05:40:33
我会给我的RectangleComponent类一个矩形的ArrayList,比如rectangleList。我为该类提供了两个公共的空方法,addRectangle()和removeRectangle()。在addRectangle()方法中,我将创建一个随机矩形(大小适合RectangleComponent的尺寸),将其添加到ArrayList中并调用repaint。在removeRectangle中,如果数组列表的大小大于0,我会删除一个矩形,然后再次调用repaint。在paintComponent中,我会遍历ArrayList,绘制矩形。我还让paintComponent在方法开始时调用超级方法。
然后,在按钮的actionPerformed方法中,调用上面适当的方法。
https://stackoverflow.com/questions/5556454
复制相似问题