我对在东面板上设置的文本字段和组合框组件有疑问。出于某种原因,当我添加 Box 布局以按 Y 排列它们时,上面列出的一些组件并没有像它们应该的那样与按钮正确对齐和缩放大小。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;
/**
*
* @author Isaac
*/
public class Test2 extends JFrame {
private JButton addNewColumnButton;
private JButton calculateColumnButton;
private JButton resultButton;
private JLabel textLabel;
private JTextField columnField;
private JTextField resultField;
private JComboBox columnListCB;
private JTable table;
private String[] tableCols = {"Fisrt Column", "Second Column", "Third Column", "", "", "", "", ""};
private Object[][] tableRows = {
{true, null, null, null, null, null, null, null},
{true, null, null, null, null, null, null, null},
{true, null, null, null, null, null, null, null},
{true, null, null, null, null, null, null, null},
{true, null, null, null, null, null, null, null},
{true, null, null, null, null, null, null, null},
{true, null, null, null, null, null, null, null},
{true, null, null, null, null, null, null, null}
};
public Test2() {
this.setSize(new Dimension(600, 280));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setResizable(false);
this.init();
this.add(getUIPanel());
this.pack();
this.setVisible(true);
}
private JPanel getUIPanel() {
JPanel panel = new JPanel(new BorderLayout());
panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
panel.setBackground(Color.blue);
JPanel center = new JPanel();
center.add(table);
JPanel eastPanel = new JPanel();
eastPanel.setBackground(Color.MAGENTA);
Box eastPanelBox = Box.createVerticalBox();
eastPanelBox.add(addNewColumnButton);
eastPanelBox.add(Box.createVerticalStrut(14));
eastPanelBox.add(columnField);
eastPanelBox.add(Box.createVerticalStrut(5));
eastPanelBox.add(columnListCB);
eastPanelBox.add(Box.createVerticalStrut(5));
eastPanelBox.add(calculateColumnButton);
eastPanel.add(eastPanelBox);
JPanel southPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 5));
southPanel.setBackground(Color.green);
southPanel.add(resultButton);
southPanel.add(textLabel);
southPanel.add(resultField);
panel.add(center, BorderLayout.WEST);
panel.add(southPanel, BorderLayout.SOUTH);
panel.add(eastPanel, BorderLayout.EAST);
return panel;
}
private void init() {
final int COMPONENT_WIDTH = 130;
final int COMPONENT_HEIGHT = 25;
table = new JTable(tableRows, tableCols);
addNewColumnButton = new JButton("New Column");
addNewColumnButton.setPreferredSize(new Dimension(COMPONENT_WIDTH, COMPONENT_HEIGHT));
columnField = new JTextField();
columnField.setPreferredSize(new Dimension(COMPONENT_WIDTH, COMPONENT_HEIGHT));
columnListCB = new JComboBox(tableCols);
columnListCB.setPreferredSize(new Dimension(COMPONENT_WIDTH, COMPONENT_HEIGHT));
calculateColumnButton = new JButton("Calculate Column");
calculateColumnButton.setPreferredSize(new Dimension(COMPONENT_WIDTH, COMPONENT_HEIGHT));
resultButton = new JButton("Calculate");
calculateColumnButton.setPreferredSize(new Dimension(COMPONENT_WIDTH, COMPONENT_HEIGHT));
textLabel = new JLabel("Result:");
resultField = new JTextField();
resultField.setPreferredSize(new Dimension(COMPONENT_WIDTH / 2, COMPONENT_HEIGHT));
}
public static void main(String[] args) {
new Test2();
}
}