Java 设置不同JComponent对象组的对齐方式
我有一个关于如何在GUI上对齐组件的问题 参考上面的屏幕截图,我希望复选框彼此对齐,但这里我得到的是一个复选框LC代理,它不符合要求,因为在同一行上有一个额外的组合框 有人能建议我应该做出哪些必要的改变来实现我的目标吗?我们还欢迎您就如何改进代码/显示提出其他建议 如果标题有误导性,请道歉;我不知道还能叫什么名字 以下是我的GUI的代码:Java 设置不同JComponent对象组的对齐方式,java,swing,user-interface,alignment,Java,Swing,User Interface,Alignment,我有一个关于如何在GUI上对齐组件的问题 参考上面的屏幕截图,我希望复选框彼此对齐,但这里我得到的是一个复选框LC代理,它不符合要求,因为在同一行上有一个额外的组合框 有人能建议我应该做出哪些必要的改变来实现我的目标吗?我们还欢迎您就如何改进代码/显示提出其他建议 如果标题有误导性,请道歉;我不知道还能叫什么名字 以下是我的GUI的代码: /** * Builds the elements for the GUI */ private void build() { // define
/**
* Builds the elements for the GUI
*/
private void build() {
// define properties
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocation(100, 100);
this.setSize(360, 250);
this.setResizable(false);
// build elements
movFileField = new JTextField(30);
movFileField.setEditable(false);
JLabel textFieldLabel = new JLabel("MOV file: ");
textFieldLabel.setLabelFor(movFileField);
JPanel filenamePane = new JPanel();
filenamePane.setLayout(new FlowLayout());
filenamePane.add(textFieldLabel);
filenamePane.add(movFileField);
JCheckBox checkIPV = new JCheckBox("IPV Proxy");
checkIPV.setSelected(configMap.get(EpoxyConfigField.IPV_PROXY.name()).isEnabled());
toggleMap.put(EpoxyConfigField.IPV_PROXY, checkIPV);
flickComps.add(checkIPV);
JCheckBox checkITX = new JCheckBox("ITX Proxy");
checkITX.setSelected(configMap.get(EpoxyConfigField.ITX_PROXY.name()).isEnabled());
toggleMap.put(EpoxyConfigField.ITX_PROXY, checkITX);
flickComps.add(checkITX);
JCheckBox checkLC = new JCheckBox("LC Proxy");
checkLC.setSelected(configMap.get(EpoxyConfigField.LC_PROXY.name()).isEnabled());
toggleMap.put(EpoxyConfigField.LC_PROXY, checkLC);
flickComps.add(checkLC);
JComboBox<String> comboLCProfile = new JComboBox<String>("A;C;D;Dxd;E".split(";"));
JCheckBox checkArchive = new JCheckBox("Archive Asset");
checkArchive.setSelected(configMap.get(EpoxyConfigField.ARCHIVE.name()).isEnabled());
toggleMap.put(EpoxyConfigField.ARCHIVE, checkArchive);
flickComps.add(checkArchive);
JPanel checkboxPane = new JPanel();
checkboxPane.setLayout(new BoxLayout(checkboxPane, BoxLayout.PAGE_AXIS));
checkboxPane.add(checkIPV);
checkboxPane.add(checkITX);
// This is the part I'm having problems with
JPanel lcproxyPane = new JPanel();
lcproxyPane.add(checkLC);
lcproxyPane.add(comboLCProfile);
checkboxPane.add(lcproxyPane);
checkboxPane.add(checkArchive);
checkboxPane.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
JButton processButton = new JButton("Process");
processButton.setActionCommand(COMMAND_PROCESS);
processButton.addActionListener(this);
flickComps.add(processButton);
JButton selectButton = new JButton("Select");
selectButton.setActionCommand(COMMAND_SELECT);
selectButton.addActionListener(this);
flickComps.add(selectButton);
statusField = new JTextArea(10,20);
statusField.setEditable(false);
statusField.setLineWrap(true);
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS));
buttonPane.add(Box.createRigidArea(new Dimension(50, 0)));
buttonPane.add(processButton);
buttonPane.add(Box.createHorizontalGlue());
buttonPane.add(selectButton);
buttonPane.add(Box.createRigidArea(new Dimension(50, 0)));
buttonPane.setBorder(BorderFactory.createEmptyBorder(0,10,10,10));
JPanel bottomPane = new JPanel();
bottomPane.setLayout(new BoxLayout(bottomPane, BoxLayout.PAGE_AXIS));
bottomPane.add(buttonPane);
bottomPane.add(new JScrollPane(statusField));
Container contentPane = this.getContentPane();
contentPane.add(filenamePane, BorderLayout.PAGE_START);
contentPane.add(checkboxPane, BorderLayout.CENTER);
contentPane.add(bottomPane, BorderLayout.PAGE_END);
this.pack();
}
无法对齐组件的原因是您使用的布局使得对齐这些组件非常困难。 我建议您使用FlowLayout而不是FlowLayout 例如:
JPanel checkboxPane = new JPanel();
GridBagLayout gbl_checkboxPane = new GridBagLayout();
gbl_checkboxPane.columnWidths = new int[]{430, 0, 0};
gbl_checkboxPane.rowHeights = new int[]{27, 27, 27, 27};
gbl_checkboxPane.columnWeights = new double[]{1.0, 0.0, Double.MIN_VALUE};
gbl_checkboxPane.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
checkboxPane.setLayout(gbl_checkboxPane);
JCheckBox checkIPV = new JCheckBox("IPV Proxy");
GridBagConstraints gbc_checkIPV = new GridBagConstraints();
gbc_checkIPV.anchor = GridBagConstraints.WEST;
gbc_checkIPV.fill = GridBagConstraints.VERTICAL;
gbc_checkIPV.insets = new Insets(0, 0, 5, 5);
gbc_checkIPV.gridx = 0;
gbc_checkIPV.gridy = 0;
checkboxPane.add(checkIPV, gbc_checkIPV);
谢谢你的例子。问题是,我一直在尝试不同的布局,但由于缺乏对不同管理者的了解,我没有得到多少结果。我将尝试一下,看看会发生什么!使用Swing布局并非易事。我真正建议您做的是使用名为Windows Builder的插件安装eclipse。使用此工具,您可以实时查看正在构建的内容。祝你好运