有没有办法迭代组件列表并将它们添加到Swing GroupLayout中的ParallelGroup?
这似乎很难,因为没有方法可以获得ParallelGroup.
以下是生成组件列表的代码(在本例中为JCheckBoxes).
List<JCheckBox> listCustomiseJCB = new ArrayList<>();
for (int w = 0; w < initialCMTableColumns.size(); w++) {
String heading = (String)initialCMTableColumns.get(w).getHeaderValue();
listCustomiseJCB.add(new JCheckBox(heading));
}
Run Code Online (Sandbox Code Playgroud)
列表正在工作,但我如何迭代List以将每个JCheckbox插入GroupLayout的ParallelGroup?例如,下面的代码将无法编译.
GroupLayout gl = new GroupLayout(jpnlCustomise);
jpnlCustomise.setLayout(gl);
gl.setAutoCreateContainerGaps(true);
gl.setAutoCreateGaps(true);
GroupLayout.SequentialGroup hGroup = gl.createSequentialGroup();
hGroup
.addComponent(jbtnApply);
hGroup.addGroup(gl.createParallelGroup(GroupLayout.Alignment.CENTER)
// ERRORS BEGIN HERE
{ for (JCheckBox c: listCustomiseJCB) {
.addComponent(c);
}});
// ERRORS END HERE
hGroup
.addComponent(jbtnCancel);
gl.setHorizontalGroup(hGroup);
Run Code Online (Sandbox Code Playgroud)
或者,是否有人知道如何获取ParallelGroup以便我可以在独立的for循环中迭代地将组件添加到该组?
使用GroupLayout在Java中构建表单的最简单方法是什么?对于表单,我的意思是具有前面带有标签的文本字段.像这样的东西:

我尝试将两个jpanels并排放置,但是在这一刻我不能做我想要的,我有这个代码,
this.videoPanel= new JPanel();
this.videoPanel.setBackground(new Color(102, 102, 102));
this.videoPanel.setPreferredSize(new Dimension(320, 240));
this.videoPanel.setLayout(new BoxLayout(this.videoPanel, 1));
GroupLayout layout = new GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(this.videoPanel, 10, 400, 500)));
layout.setVerticalGroup(
layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(this.videoPanel, 10, 400, 500)));
pack();
Run Code Online (Sandbox Code Playgroud)
`我试着再放一个jpanel:
this.videoPanel1.setBackground(new Color(102, 102, 102));
this.videoPanel1.setPreferredSize(new Dimension(320, 240));
this.videoPanel1.setLayout(new BoxLayout(this.videoPanel1, 2));
GroupLayout layout = new GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(this.videoPanel1, 10, 400, 500)
.addComponent(this.videoPanel, 10, 400, 500)));
layout.setVerticalGroup(
layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(this.videoPanel1, 10, 400, 500)
.addComponent(this.videoPanel, 10, 400, 500)));
pack();
Run Code Online (Sandbox Code Playgroud)
此代码不起作用,也不会出错.
我正在尝试创建一个带有GroupLayout的小Jpanel.尽可能地遵循文档以及查看了一些StackOverflow问题,我仍然陷入困境.
错误如下:
线程"AWT-EventQueue-0"中的异常java.lang.IllegalStateException:javax.swing.JButton [,0,0,0x0,invalid,alignmentX = 0.0,alignmentY = 0.5,border = com.apple.laf.AquaButtonBorder $ Dynamic @ 5eef2e7c,旗帜= 288,MAXIMUMSIZE =,=的minimumSize,首选大小=,=的DefaultIcon,disabledIcon =,disabledSelectedIcon =,余量= javax.swing.plaf.InsetsUIResource [顶= 0,左= 2,底部= 0,右= 2 ],paintBorder = true,paintFocus = true,pressedIcon =,rolloverEnabled = false,rolloverIcon =,rolloverSelectedIcon =,selectedIcon =,text = Invest,defaultCapable = true]未附加到垂直组
我知道问题与按钮的连接位置有关.在所有错误明确说明之后.但是,我只是无法弄清楚我应该以什么方式附加它们.有任何想法吗?
JPanel panel = new JPanel();
GroupLayout layout = new GroupLayout(panel);
panel.setLayout(layout);
panel.setMinimumSize(new Dimension(2000,100));
panel.setBorder(BorderFactory.createTitledBorder((cdo.getTicker()) + " : (" + cdo.getCurrency() + ")"));
layout.setVerticalGroup(
layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(new JButton("Invest")))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(new JButton("Ignore")))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(new JButton("Article")))
);
layout.setHorizontalGroup(
layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(new …Run Code Online (Sandbox Code Playgroud) 我正在学习Swings,我对这一行感到困惑
GroupLayout layout=new GroupLayout(getContentPane());
Run Code Online (Sandbox Code Playgroud)
现在我有2个问题
在java编程工作了近4年之后,我决定学习如何自己编写GUI类,因为到目前为止我一直使用NetBeans GUI编辑器(我并不为此感到特别自豪,但它已经很好地避免了我对组件的担心布局).
问题是我正在关注如何使用GroupLayout教程来了解我觉得非常强大的布局管理器.现在我自己做了一个小例子,然后尝试在Netbeans GUI Editor中做同样的事情,我发现两个代码之间存在一些差异,我想知道我是否遗漏了某些内容,或者NetBeans只是在GroupLayout定义中添加了无用的代码.
这是我的目标:

这是我的SSCCE:
public static void main(String[] args) {
JLabel label = new JLabel("This is a test");
label.setFont(new Font("Segoe UI Semibold", Font.BOLD | Font.ITALIC, 24));
JSeparator separator = new JSeparator(JSeparator.HORIZONTAL);
DefaultListModel model = new DefaultListModel();
model.addElement("Apple");
model.addElement("Orange");
model.addElement("Kiwi");
model.addElement("Watermelon");
JList list = new JList(model);
list.setPreferredSize(new Dimension(400, 300));
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(list);
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
Container contentPane = frame.getContentPane();
GroupLayout layout = new GroupLayout(contentPane);
layout.setAutoCreateContainerGaps(true);
contentPane.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(GroupLayout.Alignment.LEADING) …Run Code Online (Sandbox Code Playgroud) 我需要删除Component在Center的JPanel,但一些尝试之后没有占上风.
我试过这个方法:
使用BorderLayout从JPanel中删除CENTER元素
但答案的方法会产生编译时错误:
Type mismatch: cannot convert from LayoutManager to BorderLayout
Run Code Online (Sandbox Code Playgroud)
我是否错误地解释了答案?
另外,如果我只能从GroupLayout更新一个组件,我也很好奇.有人能告诉我怎么做吗?
编辑:@mre:这是代码:
BorderLayout layout = panel.getLayout();
panel.remove(layout.getLayoutComponent(BorderLayout.CENTER));
Run Code Online (Sandbox Code Playgroud)
这与链接基本相同.
谢谢你们!
我正在尝试创建自定义界面,如daches显示的界面:
-----------------------------------------------------------------
- ----------------------------------------------------------- -
- - - -
- ----------------------------------------------------------- -
- -
- ---------- -
- - - -
- ---------- -
- -
- ---------- ----------------------------------- ---------- -
- - - - - - - -
- ---------- ----------------------------------- ---------- -
- ---------- ---------- -
- - - - - -
- ---------- ---------- -
-----------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
我按照示例Here GroupLayout示例
这是我使用的代码:
GroupLayout layout = new GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setAutoCreateGaps(true);
layout.setAutoCreateContainerGaps(true);
layout.setHorizontalGroup(layout.createParallelGroup(LEADING)
.addComponent(msgLbl)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(LEADING)
.addComponent(empty)
.addComponent(fldrLbl3)
.addComponent(empty))
.addGroup(layout.createParallelGroup(LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(empty) …Run Code Online (Sandbox Code Playgroud) 我有很多JPanel,GroupLayout我用来addContainerGap()在边框上添加间隙。此外,我有一个具有其他布局 ( BorderLayout)的面板,我想为其容器添加与组布局面板相同的间隙(我将通过空边框添加它)。
所以我的问题是,如何获得容器间隙的大小?还是使用另一种方法更好?
我没有找到如何获得容器间隙的大小,所以我唯一能想到的就是在具有组布局的面板内添加面板并在那里添加容器间隙。