/ / JSplitPane non sta correggendo la correzione: java, swing, jsplitpane

JSplitPane non sta correggendo la correzione - java, swing, jsplitpane

Nella mia domanda, ho un JFrame visualizzazione a JSplitPane, con l'essere diviso VERTICAL_SPLIT. La parte superiore sta visualizzando a JLabele il fondo sta visualizzando a JInternalFrame. Si verificano due problemi.

  1. Il JLabel sta visualizzando, ma il JInternalFrame non è.

    2. Devo ridimensionare l'applicazione per avere il JSplitPane mostra a tutti

Credo che sia collegato a un uso scorretto di JSplitPane. Tuttavia, non sono stato in grado di capire cosa. Posso avere qualche aiuto con questo problema?

post scriptum Ho eseguito test per essere sicuro GUIWindow.getInsideFrame() non sta tornando null. Il instanceof i controlli alla fine dicono che entrambi i componenti del riquadro esistono e sono di quel tipo. Grazie mille per tutto il vostro aiuto:

protected static void newWindow(GUIFrame window) {
SwingUtilities.invokeLater(new Runnable(){

@Override
public void run() {
JSplitPane pane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
JInternalFrame intFrame = window.getInsideFrame();
pane.setRightComponent(intFrame);
pane.setLeftComponent(new JLabel(window.getDescription()));
synchronized(lock){
frame.remove(currentPane);
frame.add(pane);
}
synchronized(lock){
frame.revalidate();
pane.setVisible(true);
frame.repaint();
if(window instanceof ColourFrameShower) return;
currentWindow = window;
currentPane = pane;
currentFrame = intFrame;
}
if(pane.getLeftComponent() instanceof JLabel) System.out.println("JLabel exists!");
else System.out.println("JLabel does not exist!");

if(pane.getRightComponent() instanceof JInternalFrame) System.out.println("JInternalFrame exists!");
else System.out.println("JInternalFrame does not exist!");
}

});
}

EDIT: ho risolto il problema 2 con una chiamata a frame.revalidate() all'inizio del secondo synchronised(lock) bloccare. Questo è stato incluso nel codice.

risposte:

1 per risposta № 1

Come ti ho detto in commento, devi semplicemente usarlo setVisible(true) sul tuo JInternalFrame, altrimenti non sarà considerato dal tuo JSplitPane.

Questo è un errore molto comune su java swing!

Sono contento che ti abbia aiutato;)


0 per risposta № 2

Prova a impostare resizeWeight: pane.setResizeWeight (0.5);