2011-08-14 2 views
1

J'ai un JSplitPane étendu simple que je place différents panneaux à différents moments quand ils sont nécessaires. Plus précisément, je l'ai divisé en une section supérieure et inférieure, et j'échange souvent la section inférieure. Chaque fois que je le fais, je réinitialise la position du curseur à la façon dont je le veux, mais parfois il saute à et se repositionne vers le haut de l'écran (pas toujours).Comment verrouiller le diviseur JSplitPane lors de l'échange de composants?

Voici mon code:

public class MainPanel extends JSplitPane{ 

    public Screen screen; 

    public int height; 

    public ControlPanel curPanel; 

    public MainPanel(Screen screen, int height){ 
     super(JSplitPane.VERTICAL_SPLIT); 

     this.screen = screen; 
     this.height = height; 

     setDividerSize(2); 
     setEnabled(false); 

     setTopComponent(screen); 

     setToInitControls(); 
    } 

    public void setToInitControls(){ 
     InitControls initCtrls = new InitControls(this); 
     setBottomComponent(initCtrls); 
     curPanel = initCtrls; 
     setDividerLocation(height/4 * 3); 
    } 

    public void setToConfigControls(){ 
     ConfigControls configCtrls = new ConfigControls(this); 
     setBottomComponent(configCtrls); 
     curPanel = configCtrls; 
     setDividerLocation(height/4 * 3); 
    } 

    public void setToWaitControls(){ 
     WaitControls waitCtrls = new WaitControls(this); 
     setBottomComponent(null); 
     setBottomComponent(waitCtrls); 
     curPanel = waitCtrls; 
     setDividerLocation(height/4 * 3); 
    } 

    //and so on (I have more methods like these further down) 

    //OVERRIDES: I figured overriding these might help. It didn't. 
    @Override 
    public int getMinimumDividerLocation(){ 
     return (height/4 * 3); 
    } 
    @Override 
    public int getMaximumDividerLocation(){ 
     return (height/4 * 3); 
    } 
} 

Fondamentalement, j'utiliser le "setTo ... Contrôles()" méthodes d'échanger des panneaux inférieurs. Y a-t-il un moyen de dire au curseur de rester positionné là où je l'ai placé, quelles que soient les tailles préférées du panneau, ou sinon, comment puis-je faire en sorte que les panneaux sachent quoi s'adapter? Merci pour toutes les suggestions!

EDIT: Je dois noter que ces panneaux n'utilisent pas de disposition. Ce sont des panneaux personnalisés sur lesquels j'utilise des écouteurs souris/clavier et qui utilisent mes propres graphiques pour les peindre.

+2

veuillez lire ceci http://stackoverflow.com/questions/6946880/need-the-height-of-an-invalidated-swing-component – mKorbel

+0

'JPanel' est par défaut' FlowLayout', jusqu'à ce que vous le changiez; un [sscce] (http://sscce.org/) aidera à clarifier le problème. – trashgod

Répondre

0

J'ai trouvé la solution, grâce aux liens ci-dessus. C'est en fait assez simple. Au lieu d'utiliser

setDividerLocation(height/4 * 3); 

chaque fois que j'ajouté un composant, je viens de remplacer avec:

setResizeWeight(0.66); 

fait une fois à l'intérieur du constructeur, et il ne m'a jamais pris la peine de nouveau. 0.66 est la position décimale équivalente à h/4 * 3 (je l'ai juste essayé-et-ai erré).

Questions connexes