我正处于我的第一个独立Java项目中,我对我可以使用的所有库的了解有限,但对这门语言感觉很舒服。此项目需要一个 GUI 界面,左侧有一个 JTextArea,显示用户指南的说明,右侧有一个带有一些按钮的 JPanel。在我的面板上,我想包括一个带有简单绘图的组件 - 例如,三个不同大小和不同颜色的矩形 - 并为每个矩形添加不同的actionListener。我应该如何开始实施?我可以向我的 JPanel 添加什么样的组件来实现这一点?
任何建议将不胜感激。
您可以在 JPanel 的 paintComponent(...)
方法中显示 Shape 对象(如 Rectangle2D 等),然后通过向 JPanel 添加 MouseListener 来识别对形状的单击。如果你要调整各种形状的大小,我不会使用JButton或类似的东西,而只是将单个MouseListener或MouseAdapter添加到单个绘图JPanel中。Shape 有一个contains(Point p)
方法,可用于查看是否已单击任何形状。
具体说来:
在我的面板上,我想包括一个带有简单绘图的组件 - 比如,三个不同大小和不同颜色的矩形
三个 Rectangle2D 对象可以满足此要求,这些对象在扩展 JPanel 的类中声明,并在该 JPanel 的 paintComponent(Graphics g)
方法中绘制。您需要将图形对象转换为 Graphics2D,然后可以通过调用 draw(myRectangle)
来绘制 Rectangle2D 对象,并通过在绘制之前设置图形颜色来用不同的颜色填充它们,然后调用fill(myRectangle)
并为每个矩形添加不同的操作侦听器。
同样,我会使用添加到JPanel的单个MouseListener。您可以通过使用 MouseListener mousePressed 方法 MouseEvent 对象中提供给您的 Point 调用 contains(Point p)
来找出单击了哪个 Rectangle2D。
有关此内容的更多信息,请查看:
- 如何编写鼠标侦听器
- 课程:执行自定义绘画
- 形状 API
- 矩形2D API
您可以使用 JButtons 作为矩形。这使得操作处理变得容易。
http://docs.oracle.com/javase/tutorial/uiswing/components/button.html
如果你想添加不同的actionListeners ->使用JButtons。但你必须改变它的观点。
您可以使用的所有方法都在这里:http://docs.oracle.com/javase/7/docs/api/javax/swing/AbstractButton.html和这里http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#setBackground(java.awt.Color)
我可以向我的 JPanel 添加什么样的组件来实现这一点?
JDK没有,但您可以查看Play With Shapes,也许可以使用ShapeComponent
,然后您可以为每个组件添加一个MouseListener。