JSplitPane이 포함 된 JPanel이 있습니다. JPanel은 invokeAndWait 메소드를 사용하여 런타임 중에 JFrame에 주입됩니다. 그런 다음 invokeLater가 호출되어 SplitPane에서 구분선 위치를 업데이트합니다.
분할 자 업데이트가 호출 될 때 문제가 발생합니다. JPanel 너비는 여전히 0입니다.
잠자기 또는 중단 점을 코드의 아무 곳이나 추가하면 (invokeLater 제외) 코드가 올바르게 작동합니다.시작시 JSplitPane의 디바이더 위치를 설정하는 방법
final JPanel viewPanel = new JPanel();
viewPanel.setLayout(new BorderLayout());
final JPanel header = getPresenterHeader(getPageTitle(), getPageInstructions());
viewPanel.add(header, BorderLayout.NORTH);
viewPanel.add(getSplitPane(), BorderLayout.CENTER);
toolbar = createActionsToolBar();
toolbar.addAction(new ExitPresenterAction(this));
viewPanel.add(toolbar, BorderLayout.SOUTH);
addContent(viewPanel);
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
splitPane.setDividerLocation(0.5);
}
});
그것을 하지 말아야한다.'invokeLater'는 EDT에서 호출 될 때 연기 될 것이다. –
예, 주위를 둘러 볼 수 없습니다. 'invokeLater'를 이해 했으므로 GUI가 확장 될 때까지 기다려야합니다. –
다른 이벤트를 게시하기 전에 [이벤트 발송 스레드] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html)에 Swing GUI 개체를 빌드하십시오 (예 : http://stackoverflow.com/a/5071109/230513). – trashgod