【问题标题】:Including graphics/shapes in my Java GUI [closed]在我的 Java GUI 中包含图形/形状 [关闭]
【发布时间】:2013-11-01 21:19:43
【问题描述】:

我正在进行我的第一个独立 Java 项目,我对所有可用的库的了解有限,但对这种语言感觉很舒服。该项目需要一个带有 JTextArea 的 GUI 界面,该界面在左侧显示用户指导说明,在右侧有一个带有一些按钮的 JPanel。在我的面板上,我想包含一个带有简单绘图的组件——例如,三个不同大小和不同颜色的矩形——并向每个矩形添加不同的 actionListener。我应该如何开始实施这个?我可以向我的 JPanel 添加什么样的组件来实现这一点?

非常感谢任何建议。

【问题讨论】:

    标签: java swing jcomponent


    【解决方案1】:

    您可以在 JPanel 的 paintComponent(...) 方法中显示 Shape 对象(例如 Rectangle2D 等),然后通过向 JPanel 添加 MouseListener 来识别对 Shapes 的点击。如果您要调整各种形状的大小,我不会使用 JButton 或类似的东西,而只是将单个 MouseListener 或 MouseAdapter 添加到单个绘图 JPanel。 Shape 有一个contains(Point p) 方法,您可以使用该方法查看是否已单击任何形状。

    具体来说:

    在我的面板上,我想在一个简单的绘图中包含一个组件——比如说,三个不同大小和不同颜色的矩形

    三个 Rectangle2D 对象可以满足这个要求,在扩展 JPanel 的类中声明并在该 JPanel 的 paintComponent(Graphics g) 方法中绘制。您需要将 Graphics 对象转换为 Graphics2D,然后您可以通过调用 draw(myRectangle) 来绘制 Rectangle2D 对象,并通过在绘制之前设置 Graphics 颜色来填充它们,然后调用 fill(myRectangle)

    并为每个矩形添加不同的 actionListener。

    同样,我会使用一个添加到 JPanel 的 MouseListener。您可以通过在 MouseListener mousePressed 方法 MouseEvent 对象中使用给您的 Point 调用 contains(Point p) 来找出单击了哪个 Rectangle2D。

    有关更多信息,请查看:

    【讨论】:

    • Nit Pick- 断开链接 ;)
    • @MadProgrammer:谢谢,已修复!
    【解决方案2】:

    您可以使用 JButtons 作为您的矩形。这使得动作处理变得容易。

    http://docs.oracle.com/javase/tutorial/uiswing/components/button.html

    【讨论】:

      【解决方案3】:

      如果你想添加不同的 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)

      【讨论】:

        【解决方案4】:

        我可以向我的 JPanel 添加什么样的组件来实现这一点?

        JDK 没有,但您可以查看Playing With Shapes 并可能使用ShapeComponent,然后您可以为每个组件添加一个 MouseListener。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-10-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多