Nella mia domanda, ho un JFrame
visualizzazione a JSplitPane
, con l'essere diviso VERTICAL_SPLIT
. La parte superiore sta visualizzando a JLabel
e il fondo sta visualizzando a JInternalFrame
. Si verificano due problemi.
Il
JLabel
sta visualizzando, ma ilJInternalFrame
non è.2. Devo ridimensionare l'applicazione per avere ilJSplitPane
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 № 1Come 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);