У меня есть простое приложение Swing, которое состоит из JLabel и трех кнопок. Три кнопки находятся в своем собственном JPanel, который находится в JFrame вместе с JLabel. JPanel использует диспетчер потока, чтобы расположить кнопки горизонтально, а JFrame использует менеджер BorderLayout, чтобы расположить JLabel и JPanel вертикально.
Моя проблема, когда я запускаю приложение, во время использования меняется текст на одной из кнопок, что увеличивает его ширину. Однако размер окна не изменяется, чтобы приспособиться к этому, и одна из кнопок исчезает. Я снова подумал о вызове pack (), но JFrame - это локальная переменная в моем конструкторе, и мне не нужно было указывать моей программе изменить размер, верно? Я не смог найти что-либо в Google или здесь, чтобы помочь мне, но должно быть простое решение, что мне не хватает? Код ниже.
playButton = new JButton("Play");
pauseButton = new JButton("Pause");
stopButton = new JButton("Stop");
curTrackLabel = new JLabel("No Track Selected");
JFrame myFrame = new JFrame("MediaPlayer");
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setTitle("MediaPlayer");
myFrame.setLocation(400,300);
JPanel topPanel = new JPanel();
topPanel.setLayout(new BorderLayout());
myFrame.add(topPanel);
JPanel buttonPanel = new JPanel(new FlowLayout());
buttonPanel.add(playButton);
buttonPanel.add(pauseButton);
buttonPanel.add(stopButton);
topPanel.add(buttonPanel, BorderLayout.CENTER);
topPanel.add(curTrackLabel, BorderLayout.NORTH);
playButton.addActionListener(new playButtonHandler());
pauseButton.addActionListener(new pauseButtonHandler());
stopButton.addActionListener(new stopButtonHandler());
myFrame.pack();
myFrame.setVisible(true);