Я пытаюсь научить себя создавать графический интерфейс с помощью Java Swing и Window Builder Pro после просмотра нескольких видеороликов на YouTube, чтения некоторых руководств и задания предыдущего вопроса, расположенного здесь Я сделал следующее.
public class JetstreamFrame extends JFrame {
private static final long serialVersionUID = 1L;
JTabbedPane tabPane;
private JPanel buttonOnePanel;
private JPanel buttonTwoPanel;
private SpringLayout springLayout;
private SpringLayout sl_buttonTwoPanel;
private SpringLayout sl_buttonOnePanel;
private JButton ButtonTwo;
private JButton ButtonOne;
private JScrollPane displayTextPanel;
private JTextArea textArea;
private ScrollPaneLayout sl_displayTextPanel;
private JComboBox<String> comboBox;
public JetstreamFrame() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
springLayout = new SpringLayout();
getContentPane().setLayout(springLayout);
tabPane = new JTabbedPane(JTabbedPane.TOP);
setupTabPane();
buttonOnePanel = new JPanel();
sl_buttonOnePanel = new SpringLayout();
setupButtonOnePanel();
buttonTwoPanel = new JPanel();
sl_buttonTwoPanel = new SpringLayout();
setupButtonTwoPanel();
ButtonOne = new JButton("Click Here!");
setupButtonOne();
setupComboBox();
ButtonTwo = new JButton("Click Here!");
setupButtonTwo();
displayTextPanel = new JScrollPane(textArea);
sl_displayTextPanel = new ScrollPaneLayout();
setupDisplayTextPanel();
textArea = new JTextArea();
displayTextPanel.setViewportView(textArea);
}
private void setupTabPane()
{
springLayout = new SpringLayout();
springLayout.putConstraint(SpringLayout.NORTH, tabPane, 0, SpringLayout.NORTH, getContentPane());
springLayout.putConstraint(SpringLayout.WEST, tabPane, 0, SpringLayout.WEST, getContentPane());
springLayout.putConstraint(SpringLayout.SOUTH, tabPane, 245, SpringLayout.NORTH, getContentPane());
springLayout.putConstraint(SpringLayout.EAST, tabPane, 484, SpringLayout.WEST, getContentPane());
getContentPane().setLayout(springLayout);
springLayout.putConstraint(SpringLayout.NORTH, tabPane, 0, SpringLayout.NORTH, getContentPane());
springLayout.putConstraint(SpringLayout.WEST, tabPane, 0, SpringLayout.WEST, getContentPane());
springLayout.putConstraint(SpringLayout.SOUTH, tabPane, -198, SpringLayout.SOUTH, getContentPane());
springLayout.putConstraint(SpringLayout.EAST, tabPane, 484, SpringLayout.WEST, getContentPane());
getContentPane().add(tabPane);
}
private void setupButtonOnePanel()
{
tabPane.addTab("Tab One", null, buttonOnePanel, null);
buttonOnePanel.setLayout(sl_buttonOnePanel);
}
private void setupButtonOne()
{
ButtonOne.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0)
{
textArea.append("You pressed button one, ");
textArea.append("ComboField: " + (String)comboBox.getSelectedItem() + "\n");
}
});
sl_buttonOnePanel.putConstraint(SpringLayout.NORTH, ButtonOne, 99, SpringLayout.NORTH, buttonOnePanel);
sl_buttonOnePanel.putConstraint(SpringLayout.WEST, ButtonOne, 187, SpringLayout.WEST, buttonOnePanel);
buttonOnePanel.add(ButtonOne);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
private void setupComboBox()
{
String[] array = { "1" , "2", "3", "4" };
comboBox = new JComboBox(array);
sl_buttonOnePanel.putConstraint(SpringLayout.NORTH, comboBox, 99, SpringLayout.NORTH, buttonOnePanel);
sl_buttonOnePanel.putConstraint(SpringLayout.WEST, comboBox, 6, SpringLayout.EAST, ButtonOne);
sl_buttonOnePanel.putConstraint(SpringLayout.EAST, comboBox, 167, SpringLayout.EAST, ButtonOne);
buttonOnePanel.add(comboBox);
}
private void setupButtonTwoPanel()
{
tabPane.addTab("Tab Two", null, buttonTwoPanel, null);
buttonTwoPanel.setLayout(sl_buttonTwoPanel);
}
private void setupButtonTwo()
{
ButtonTwo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0)
{
textArea.append("You pressed button two\n");
}
});
sl_buttonTwoPanel.putConstraint(SpringLayout.NORTH, ButtonTwo, 99, SpringLayout.NORTH, buttonTwoPanel);
sl_buttonTwoPanel.putConstraint(SpringLayout.WEST, ButtonTwo, 187, SpringLayout.WEST, buttonTwoPanel);
buttonTwoPanel.add(ButtonTwo);
}
private void setupDisplayTextPanel()
{
springLayout.putConstraint(SpringLayout.NORTH, displayTextPanel, 5, SpringLayout.SOUTH, tabPane);
springLayout.putConstraint(SpringLayout.WEST, displayTextPanel, 5, SpringLayout.WEST, tabPane);
springLayout.putConstraint(SpringLayout.SOUTH, displayTextPanel, 195, SpringLayout.SOUTH, tabPane);
springLayout.putConstraint(SpringLayout.EAST, displayTextPanel, -5, SpringLayout.EAST, tabPane);
getContentPane().add(displayTextPanel);
displayTextPanel.setLayout(sl_displayTextPanel);
}
public void start()
{
this.setSize(500, 500);
this.setVisible(true);
}
}
Со времени предыдущего вопроса я смог реализовать правильный выход из программы при закрытии окна и реализацию поля со списком, в котором нажатие кнопки будет печатать значение, выбранное внутри поля со списком.
У меня есть несколько функций, которые я хотел бы реализовать, но я не уверен, как двигаться дальше.
Первое, что я хотел бы сделать, и, вероятно, самое простое, это отключить возможность изменения размера окна. Поскольку я не могу найти простой способ сохранить относительные поля при изменении размера, устранение возможности изменения размера окна является следующим лучшим вариантом.
Другой вариант, который я хотел бы уточнить, - это редактирование содержимого поля со списком после построения. В идеале я хотел бы иметь возможность добавлять и удалять записи из поля с помощью нажатия кнопок. Я не могу найти метод, который позволяет мне установить содержимое поля, и кажется, что единственный способ сделать это — создавать новое поле со списком каждый раз, когда вносятся изменения. Есть ли более эффективный способ сделать это?