繁体   English   中英

Java JFrame / Swing对齐

[英]Java JFrame/Swing alignment

我是新手,目前正在学习JFrame,但我的ComboBox,复选框和按钮的对齐方式遇到问题。 侦听器尚未连接起来,这只是测试是否正确对齐。 我的问题是为什么对齐功能似乎不起作用? 我希望组合框位于顶部,中间是复选框,底部是按钮。 在此处输入图片说明

import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JCheckBox;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.SwingConstants;

public class CheckBoxFrame extends JFrame 
{

private final JComboBox<String> colorComboBox; 
private final JCheckBox backgroundColorCheckBox; 
private final JCheckBox foregroundColorCheckBox; 
private final JButton okButton;
private final JButton cancelButton;

private static final String[] color =
{"Red", "Blue", "Green", "Purple"};

public CheckBoxFrame()
{
  super("ColorSelect");
  setLayout(new FlowLayout());


  colorComboBox = new JComboBox<String>(color);
  colorComboBox.setAlignmentX(SwingConstants.TOP);
  add(colorComboBox);


  backgroundColorCheckBox = new JCheckBox("Background"); 
  foregroundColorCheckBox = new JCheckBox("Foreground"); 
  foregroundColorCheckBox.setVerticalAlignment(SwingConstants.CENTER);
  backgroundColorCheckBox.setVerticalAlignment(SwingConstants.CENTER);
  add(backgroundColorCheckBox); // add bold checkbox to JFrame
  add(foregroundColorCheckBox); // add italic checkbox to JFrame

  okButton = new JButton("Ok");
  cancelButton = new JButton("Cancel");
  okButton.setVerticalAlignment(SwingConstants.BOTTOM);
  cancelButton.setVerticalAlignment(SwingConstants.BOTTOM);
  add(okButton);
  add(cancelButton);


  // register listeners for JCheckBoxes
  CheckBoxHandler handler = new CheckBoxHandler();
  backgroundColorCheckBox.addItemListener(handler);
  foregroundColorCheckBox.addItemListener(handler);
  } 


private class CheckBoxHandler implements ItemListener 
{
  // respond to checkbox events
  @Override
  public void itemStateChanged(ItemEvent event)
  {

  } 
 }
} // end class CheckBoxFrame

JavaDocs获得setVerticalAlignment

设置图标和文本的垂直对齐方式。

这将更改在组件上下文内布置icontext属性的方式。

setVerticalAlignment不会影响组件在容器中的布局方式。

要更改组件在容器中的布局方式,您将需要更改布局管理器,请参阅课程:在容器中布局组件

根据您的要求,有多种方法可以实现它。

您可以使用GridLayout ,将单个行的所有组件包装在自己的JPanel并将此面板添加到主容器中。

您还可以使用GridBagLayout ,它虽然更复杂,但也更灵活

import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JCheckBox;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.SwingConstants;

public class CheckBoxFrame extends JFrame 
{

private final JComboBox<String> colorComboBox; 
private final JCheckBox backgroundColorCheckBox; 
private final JCheckBox foregroundColorCheckBox; 
private final JButton okButton;
private final JButton cancelButton;

private static final String[] color = {"Red", "Blue", "Green", "Purple"};

public CheckBoxFrame()
{
  super("ColorSelect");
  setLayout(new GridBagLayout());

  GridBagConstraints c = new GridBagConstraints();
  colorComboBox = new JComboBox<String>(color);
  c.fill = GridBagConstraints.HORIZONTAL;
  c.gridx = 0;
  c.gridy = 0;
  c.gridwidth = 2;
  add(colorComboBox, c);


  backgroundColorCheckBox = new JCheckBox("Background"); 
  c.fill = GridBagConstraints.HORIZONTAL;
  c.gridx = 0;
  c.gridy = 1;
  c.gridwidth = 1;
  add(backgroundColorCheckBox, c); // add bold checkbox to JFrame

  foregroundColorCheckBox = new JCheckBox("Foreground");
  c.fill = GridBagConstraints.HORIZONTAL;
  c.gridx = 1;
  c.gridy = 1;
  c.gridwidth = 1;
  add(foregroundColorCheckBox, c); // add italic checkbox to JFrame

  okButton = new JButton("Ok");
  c.fill = GridBagConstraints.HORIZONTAL;
  c.gridx = 0;
  c.gridy = 2;
  c.gridwidth = 1;
  add(okButton, c);

  cancelButton = new JButton("Cancel");
  c.fill = GridBagConstraints.HORIZONTAL;
  c.gridx = 1;
  c.gridy = 2;
  c.gridwidth = 1;
  add(cancelButton, c);


  // register listeners for JCheckBoxes
  CheckBoxHandler handler = new CheckBoxHandler();
  backgroundColorCheckBox.addItemListener(handler);
  foregroundColorCheckBox.addItemListener(handler);
  } 


private class CheckBoxHandler implements ItemListener 
{
  // respond to checkbox events
  @Override
  public void itemStateChanged(ItemEvent event)
  {

  } 
 }
} // end class CheckBoxFrame

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM