Как я могу выровнять компоненты в строке со столом без ущерба для разрыва между компонентами 5px? У меня была идея, чтобы установить значение для hgap от FlowLayout к нулю, но если я это изменит зазор между компонентами и ... Вот скриншот и код, если я не был ясен:Как отрегулировать положение компонентов в строке
Как Я хочу:
Как это:
Код:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;
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.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
public class Test3 {
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 = {
"First 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 Test3() {
JFrame f = new JFrame("Test2");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(getPanelComponents());
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
private JPanel getPanelComponents() {
JPanel panel = new JPanel(new BorderLayout());
panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
JPanel center = new JPanel(new GridLayout());
table = new JTable(tableRows, tableCols);
table.setPreferredScrollableViewportSize(new Dimension(450, 128));
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
center.add(new JScrollPane(table));
JPanel eastPanel = new JPanel();
Box eastPanelBox = Box.createVerticalBox();
addNewColumnButton = new JButton("Add New Column");
addNewColumnButton.setAlignmentX(Box.CENTER_ALIGNMENT);
eastPanelBox.add(addNewColumnButton);
eastPanelBox.add(Box.createVerticalStrut(35));
columnField = new JTextField();
columnField.setAlignmentX(Box.CENTER_ALIGNMENT);
eastPanelBox.add(columnField);
eastPanelBox.add(Box.createVerticalStrut(5));
columnListCB = new JComboBox(tableCols);
columnListCB.setAlignmentX(Box.CENTER_ALIGNMENT);
eastPanelBox.add(columnListCB);
eastPanelBox.add(Box.createVerticalStrut(5));
calculateColumnButton = new JButton("Calculate Column");
calculateColumnButton.setAlignmentX(Box.CENTER_ALIGNMENT);
eastPanelBox.add(calculateColumnButton);
eastPanel.add(eastPanelBox);
JPanel southPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 5));
resultButton = new JButton("Calculate");
southPanel.add(resultButton);
textLabel = new JLabel("Result:");
southPanel.add(textLabel);
resultField = new JTextField(10);
southPanel.add(resultField);
panel.add(center, BorderLayout.WEST);
panel.add(southPanel, BorderLayout.SOUTH);
panel.add(eastPanel, BorderLayout.EAST);
return panel;
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Test3();
}
});
}
}
см 'JPanel southPanel = новые JPanel (новая FlowLayout (FlowLayout.LEFT, 0, 0));' это ('5pixels является default' щелевые) устанавливает по' новым FlowLayout (FlowLayout .LEFT, 5, 5)); 'FlowLayout не может быть подходящим для этой работы, вы можете помочь вам с помощью Borders' xxx.setBorder (новый LineBorder (Color.BLACK, 1)); ' – mKorbel
См. Также [Laying Out Компоненты в контейнере] (http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html) –
Итак, следует ли затем создать две панели для этих свойств? Например, 'code JPanel panel = new JPanel(); panel.setBorder (новый LineBorder (null, 0)); ', а затем внутренний JPanel, который содержит FlowLayout и его компоненты с разрывом 5px? постскриптум Мне действительно не нравится, если вы установили нулевой параметр цвета, они все равно начнут по умолчанию цвет:/ –