我希望从ini文件构建一个GUI,这样,非程序员就可以在需要时更容易地更改布局。
我可以添加JPanel
容器和某些Swing组件,其中包含在文本文件中给出的关键字和参数,如下所示:
//new panel
JPanel "noborder"
alignleft
JLabel
text "Bias (V)"
JToggleButton
text "+/-"
JSpinner "bias"
alignleft
JLabel
text "V"
newline
alignleft
JLabel
text "Current Setpoint"
gridx "2"
JSpinner "setpoint"
alignleft
JLabel
text "nA"
newline
alignleft
JLabel
text "Feedback"
gridx "2"
JSpinner "feedback"
alignleft
JLabel
text "nm/s"
newline
alignleft
JLabel
text "Compensation"
gridx "2"
JSpinner "compensation"
我认为所使用的语法非常简单,换行符集gridx = 0
、gridy++
、gridy++
用给定的GridBagConstraints
向框架中添加了新的组件,并增加了gridx
,
这些面板被添加到JFrame
中,使用GridBagLayout
frameGbc
按Y方向对齐,设置如下:
frameGbc = new GridBagConstraints();
frameGbc.gridx = 0;
frameGbc.gridy = 0;
frameGbc.anchor = GridBagConstraints.CENTER;
frameGbc.fill = GridBagConstraints.HORIZONTAL;
frameGbc.gridwidth = GridBagConstraints.REMAINDER;
添加面板后,gridy
将增加1。
当我添加组件时,它将被添加到最后一个添加到框架中的面板中。我可以通过ini设置gridx
、gridy
、gridwidth
、gridheight
和锚.
我目前使用的文件提供了以下布局:
您可以看到的下半部分(从文本“JLabel
(V)”开始)是由我前面提供的ini文件的一部分设置的。
组件占用了它们所需的空间,面板显然是它们的中心。
我想要做的是,对每个面板使用最宽的面板(在这里需要空间最大的面板:有6个按钮的面板)给出的全宽度,例如,对于最后一个面板,程序在最大宽度的四分之一处自动调整一个单元格的宽度,因为放置组件的最大gridx
是gridx = 3
->
cellwidth = maxwidth/4
或者,更广泛地说:
cellwidth = maxwidth / (highest occupied gridx +1)
我玩了几个限制,寻找类似的问题几个小时,因为我找不到其他有类似问题的人--我想这个解决方案肯定很简单,或者很棘手。
我非常想避免使用weightx
,weighty
,ipadx
,ipady
,.因为..ini文件的语法应该尽可能简单。
发布于 2017-04-25 06:57:45
因此,例如,对于最后一个面板,程序在最大宽度的四分之一处自动调整一个单元格的宽度。
你不能这么做。这实际上就像说一个单元格的网格宽度应该是1.5,这是行不通的。
一种解决方案可能是创建嵌套面板。嵌套面板的网格宽度为6,以占用所有6个单元格的空间。然后,添加到该面板中的4个组件将占用该面板可用空间的1/4。
https://stackoverflow.com/questions/43614033
复制相似问题