我正在学习Java Swing,并且遇到了我认为是一个有趣的话题,我找不到在线答案。所以我的问题是我有一个使用Miglayout的JFrame,但它没有像我希望的那样工作。我会发布一张图片,说明它目前的样子和我希望它看起来像什么,我也会发布我的代码。此外,我试图将JPanel放在JPanel上,然后使用Miglayout移动它们,但这不起作用。 Miglayout会使用这个还是另一个布局管理器会更好?
EDIT 我希望它看起来像是有一个JTextArea,它旁边有3个JRadioButtons组合在一起,但堆栈底部的单选按钮重新格式化,所以它最终在JTextArea的底部
public SecondFrame() {
formPanel.setLayout(new net.miginfocom.swing.MigLayout());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(500, 525);
f.setVisible(true);
f.setLocationRelativeTo(null);
//by adding the buttons to a group it will only allow you to select 1 button at a time
buttonGroupLocation.add(sydney);
buttonGroupLocation.add(melbourne);
buttonGroupLocation.add(brisbane);
buttonGroupSeverityLevels.add(lowSeverityBtn);
buttonGroupSeverityLevels.add(mediumSeverityBtn);
buttonGroupSeverityLevels.add(highSeverityBtn);
buttonGroupSeverityLevels.add(criticalSeverityBtn);
formPanel.add(sydney, "cell 0 0 1 1");
formPanel.add(melbourne, "cell 0 1 1 1, wrap");
formPanel.add(brisbane, "cell 0 2 1 1, wrap");
formPanel.add(issue, "cell 1 0 1 1, wrap");
formPanel.add(issueArea, "span ");
formPanel.add(solution, "cell 0 8 1 1, wrap");
formPanel.add(solutionArea, "cell 0 15 8 1");
formPanel.add(severity, "cell 0 4 1 1, wrap");
formPanel.add(lowSeverityBtn, "cell 0 5 1 1");
formPanel.add(mediumSeverityBtn, "cell 1 5 1 1");
formPanel.add(highSeverityBtn, "cell 2 5 1 1");
formPanel.add(criticalSeverityBtn, "cell 3 5 1 1");
formPanel.add(submit, "cell 0 16 1 1");
formPanel.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
f.add(formPanel);
formPanel.add(submit, "cell 0 16 1 1");
答案 0 :(得分:0)
如果MigLayout
无法做到,那么其他布局管理员就很难做到。
对于MigLayout
,这是小菜一碟。怎么样有几种方法
完成你的任务。我通过放置三个无线电来完成它
按钮进入一个单元格。这可以通过将细胞分成三个来完成
子电池。
package com.zetcode;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import net.miginfocom.swing.MigLayout;
public class MigLayoutAirportEx extends JFrame {
public MigLayoutAirportEx() {
initUI();
}
private void initUI() {
setLayout(new MigLayout());
ButtonGroup bg = new ButtonGroup();
JRadioButton sydn = new JRadioButton("Sydney");
JRadioButton melb = new JRadioButton("Melbourne");
JRadioButton bris = new JRadioButton("Brisbane");
bg.add(sydn);
bg.add(melb);
bg.add(bris);
JLabel issue = new JLabel("Issue");
JTextArea area = new JTextArea(15, 20);
area.setBorder(BorderFactory.createEtchedBorder());
add(sydn, "split 3, flowy, aligny top");
add(melb);
add(bris);
add(issue, "split 2, flowy");
add(area, "push, grow, wrap");
pack();
setTitle("ARE - Airport Retail Enteprises");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
MigLayoutAirportEx ex = new MigLayoutAirportEx();
ex.setVisible(true);
});
}
}
该示例创建了您遇到问题的UI的上半部分。
此外,我试图将JPanel放在JPanel上然后移动它们 使用Miglayout但是没有用。
这些是糟糕的布局管理者继承的坏习惯。使用MigLayout
,您不需要任何其他面板与其他布局管理器。强大的布局管理员不需要这个。
以下是截图: