JLabel과 3 개의 버튼으로 구성된 간단한 스윙 애플리케이션이 있습니다. 3 개의 버튼은 JLabel과 함께 JFrame에있는 자체 JPanel에 있습니다. JPanel은 flowlayout 관리자를 사용하여 버튼을 수평으로 배열하고 JFrame은 BorderLayout 관리자를 사용하여 JLabel과 JPanel을 세로로 정렬합니다.모든 버튼을 표시하도록 JFrame 크기를 자동으로 조정할 수있는 방법
내 문제는 응용 프로그램을 사용하는 동안 버튼 중 하나의 텍스트가 변경되어 너비가 늘어납니다. 그러나 창 크기를 조정할 필요가 없으며 단추 중 하나가 사라집니다. 나는 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);
+1, 멋지다! 나는 오늘 새로운 방법을 배운다. 과거에는 SwingUtilities.windowForComponent (...)를 제안했습니다. – camickr
조금 해킹 된 것 같지만 이것이 효과가 있습니다. – CalumMcCall