我一直在尝试在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中通过右键单击组件并在自动调整大小选项中选择"垂直"和/或"水平"来完成。
你可以走老路,简单高效:
-
设置布局管理器为null
contentPane。setLayout (null);
-
在你的类中实现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 ) ;
}