Используйте собственный макет JToolBar, но добавьте горизонтальный клей между двумя последними кнопками.Это раскроет вещи для вас.Например:
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.*;
@SuppressWarnings("serial")
public class BoxLayoutEg extends JPanel {
public BoxLayoutEg() {
String[] btnTexts = {"One", "Two", "Three", "Four", "Five", "Exit"};
JToolBar toolBar = new JToolBar();
for (int i = 0; i < btnTexts.length; i++) {
JButton button = new JButton(btnTexts[i]);
if (i != btnTexts.length - 1) {
toolBar.add(button);
toolBar.addSeparator();
} else {
toolBar.add(Box.createHorizontalGlue());
toolBar.add(button);
}
}
setLayout(new BorderLayout());
add(toolBar, BorderLayout.PAGE_START);
setPreferredSize(new Dimension(400, 300));
}
private static void createAndShowGui() {
BoxLayoutEg mainPanel = new BoxLayoutEg();
JFrame frame = new JFrame("BoxLayout Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
}
Согласно комментарию VGR:
Лучше использовать createGlue (), поэтомурастянутая компоновка сохраняется даже в том случае, если JToolBar является плавающим, а затем перемещается и повторно устанавливается вертикально пользователем.
и он прав.Поэтому измените это:
} else {
toolBar.add(Box.createHorizontalGlue());
toolBar.add(button);
}
на следующее:
} else {
toolBar.add(Box.createGlue());
toolBar.add(button);
}
, чтобы разделение сохранялось, даже если панель инструментов находится в вертикальном положении
Также обратите внимание, что есливам нужно ограничить размер JTextField, вы можете установить его максимальный размер равным предпочтительному размеру, например,
} else {
int columns = 10;
JTextField time = new JTextField(columns);
time.setMaximumSize(time.getPreferredSize());
toolBar.add(time);
toolBar.add(Box.createHorizontalGlue());
toolBar.add(button);
}