在JPanel中实现图形



我一直在尝试在Netbeans中制作的GUI应用程序中实现图形。我已经使用GUI编辑器完成了布局(按钮,文本框等),到目前为止一切都很好。基本上,我想做的是在JFrame的下半部分生成一些图形(线条等),而将复选框、按钮等保留在JFrame的上半部分。

从我看到的示例中,一般的方法是创建一个类,它扩展JPanel并包含图形代码来创建线条和其他各种形状。我已经能够独立于GUI编辑器实现此功能,但是应用程序仅由占据整个JFrame的JPanel组成。我在GUI编辑器中使用的不同方法要么生成图形,但屏蔽了JFrame中的其他所有内容(即使是一小行),要么根本不做任何事情。

理想情况下,我希望能够在JFrame的任意位置放置任意大小的JPanel,并创建包含在该面板中的图形。我还希望我创建的图形的坐标被引用到JPanel而不是JFrame(所以坐标0,0是我的JPanel的左上角,不管我决定把它放在哪里。)

是否有一种直接的方法来做到这一点?

(示例代码将不胜感激)

首先,您必须提供一个类来扩展JPanel,然后重写paintComponent方法来提供您自定义的图形绘制。

然后在JFrame上,您需要使用适当的布局管理器在JFrame上放置多个组件。例如,您可以使用GridLayout将Jframe分成相等的两部分。上面的一个可以包含一个普通的JPanel和你的按钮和控件,下面的一个将是你的自定义JPanel和自定义图形。

你在paintComponent中使用的坐标将只指向底部的JPanel。

当然如果你需要更具体的布局选项,你可以使用比GridLayout更高级的布局管理器。

  • 这也可以在netbeans ide中通过右键单击组件并在自动调整大小选项中选择"垂直"和/或"水平"来完成。

你可以走老路,简单高效:

  1. 设置布局管理器为null

    contentPane

    。setLayout (null);

  2. 在你的类中实现public void layout()方法

例如

   public void doLayout () {
      Dimension size      = getSize() ;
      int       x         = wizardImage.getImage().getWidth(this)+10 ;
      int       y         = 5 ;
      int       rowHeight = 18;
      super.doLayout() ;
      st_IMAGE.setBounds ( 5,((size.height-40)/2)-(wizardImage.getImage().getHeight(this)/2), wizardImage.getImage().getWidth(this), wizardImage.getImage().getHeight(this)) ;
      st_EXPORTTYPE.setBounds ( x, y, size.width-(x)-10, rowHeight ) ;
      y+=rowHeight ;
      rb_TAB_DELIM.setBounds ( x, y, size.width-(x)-10-100, rowHeight ) ;
      y+=rowHeight ;
      rb_COMMA_SEPARATED.setBounds ( x, y, size.width-(x)-10-100, rowHeight ) ;
      y+=rowHeight ;
      rb_FLAT_TEXT.setBounds ( x, y, size.width-(x)-10-100, rowHeight ) ;
      y+=rowHeight+10 ;
      pb_EXPORT.setLocation ( x, size.height-75 ) ;
      pb_CANCEL.setLocation ( x+pb_EXPORT.getMinimumSize().width+5, size.height-75 ) ;
   }

相关内容

  • 没有找到相关文章