【发布时间】:2020-07-11 21:56:30
【问题描述】:
我正在尝试创建一个使用滑块生成矩形的程序。 用户应该能够移动滑块,矩形应该出现在滑块上方的 JPanel 上,具有随机位置。 我已尝试运行该程序,但仍然无法显示任何内容,我移动滑块但屏幕上没有显示任何内容。 我曾尝试使用书中的示例编写此程序,但在实际绘制矩形时我卡住了。我能够创建和更改布局以及显示滑块和一些标签,但我无法让矩形出现在 JPanel 上。 这是我的代码:
import java.util.*;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JLabel;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Rectangle;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Dimension;
import java.lang.Object;
public class RectangleFrame extends JFrame
{
private static final int FRAME_WIDTH = 600;
private static final int FRAME_HEIGHT = 500;
private JPanel RectanglePanel;
private JSlider RectangleSlider;
int x = 0;
int y = 0;
/**Creates a new Rectangle frame objects.
Creates control panel and sets the size.*/
public RectangleFrame()
{
RectanglePanel = new JPanel();
RectanglePanel.setPreferredSize(new Dimension(600, 300));
add(RectanglePanel, BorderLayout.CENTER);
createControlPanel();
setRectangles();
setSize(FRAME_WIDTH,FRAME_HEIGHT);
}
class RectangleListener implements ChangeListener
{
public void stateChanged(ChangeEvent event)
{
setRectangles();
}
}
/**Creates the Panel where the user can slide and generate rectangles. */
public void createControlPanel()
{
ChangeListener listener = new RectangleListener();
RectangleSlider = new JSlider(JSlider.HORIZONTAL, 1, 20, 1);
RectangleSlider.addChangeListener(listener);
JPanel controlPanel = new JPanel();
controlPanel.setLayout(new GridLayout(1,3));
controlPanel.add(new JLabel("Fewer"));
controlPanel.add(RectangleSlider);
controlPanel.add(new JLabel("More"));
add(controlPanel, BorderLayout.SOUTH);
}
public void setRectangles()
{
Random random = new Random();
//Read slider value
int numberOfRectangles = RectangleSlider.getValue();
for(int i = 0; i < numberOfRectangles; i++)
{
x = random.nextInt(540);
y = random.nextInt(290);
}
}
protected void paintComponent(Graphics g)
{
super.paintComponents(g);
g.setColor(Color.BLACK);
g.drawRect(x, y, 60, 10);
}
}
我尝试过绘制一个简单的矩形,但在 JPanel 上什至没有出现,更不用说多个了。任何进一步研究此问题的资源也将受到高度赞赏。
【问题讨论】:
-
一种方法是创建要绘制的对象的 ArrayList。然后 JPanel 的 paintComponent() 方法将简单地遍历 ArrayList 并绘制每个对象。请参阅 Custom Painting Approaches 了解演示该概念的工作示例。
标签: java swing jpanel rectangles jslider