Ich habe JPanel, die JSplitPane enthält. Das JPanel wird während einer Laufzeit in einen JFrame mit der Methode invokeAndWait injiziert. Dann wird der InvokeLater aufgerufen, um die Teilerposition in SplitPane zu aktualisieren.
Das Problem ist, wenn das Teilerupdate aufgerufen wird, ist JPanel Breite immer noch 0 Wenn ich Schlaf oder einen Haltepunkt irgendwo im Code (außer dem InvokeLater) hinzufügen, funktioniert der Code gut.So legen Sie die Teilerposition für JSplitPane beim Start fest
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);
}
});
Es sollte nicht, invokeLater wird aufgeschoben, wenn in EDT aufgerufen wird. –
Ja, ich kann es nicht verstehen. Wie ich "invokeLater" verstehe, sollte es warten, bis die GUI erweitert wird. –
Stellen Sie sicher, dass Sie Ihre Swing-GUI-Objekte im [Ereignisversand-Thread] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html) erstellen, bevor Sie ein anderes Ereignis für [Beispiel] (http://stackoverflow.com/a/5071109/230513). – trashgod