2009-11-23 18 views

Répondre

2

Si vous utilisez la version de base de JScrollBar, il s'agit probablement d'un rendu avec BasicScrollBarUI. Je suggère que vous étendiez BasicScrollBarUI pour créer une classe d'interface utilisateur personnalisée (comme MyBasicScrollBarUI). Les boutons sont des variables protégées dans la superclasse. Vous devez donc remplacer les méthodes installComponents() de la sous-classe et vous assurer que vous n'ajoutez pas les boutons. Voir l'extrait de code ci-dessous et masquer les lignes comme suggéré ici.

protected void installComponents(){ 
    switch (scrollbar.getOrientation()) { 
    case JScrollBar.VERTICAL: 
     incrButton = createIncreaseButton(SOUTH); 
     decrButton = createDecreaseButton(NORTH); 
     break; 

    case JScrollBar.HORIZONTAL: 
     if (scrollbar.getComponentOrientation().isLeftToRight()) {  
      incrButton = createIncreaseButton(EAST); 
      decrButton = createDecreaseButton(WEST); 
     } else { 
      incrButton = createIncreaseButton(WEST); 
      decrButton = createDecreaseButton(EAST); 
     } 
     break; 
    } 
    scrollbar.add(incrButton); // Comment out this line to hide arrow 
    scrollbar.add(decrButton); // Comment out this line to hide arrow 
    // Force the children's enabled state to be updated. 
scrollbar.setEnabled(scrollbar.isEnabled()); 
} 

Ensuite, dans votre code après l'initialisation d'un JScrollBar, vous pouvez appeler setUI() et passer dans une instance de la classe MyBasicScrollBarUI.

Note: Je n'ai pas essayé moi-même, mais d'après le code, il semble que cela puisse fonctionner.

+0

Vous devriez probablement pas étendre l'interface utilisateur « de base ». Si vous le faites, vous perdez toutes les personnalisations LAF. Donc, vous devriez probablement étendre MetalScrollBarUI, ou quelle que soit l'interface utilisateur utilisée pour votre LAF. – camickr

+0

@camickr: d'accord avec ça. L'extension de l'interface utilisateur de base était la manière la plus simple d'illustrer une solution possible. – Thimmayya

+0

@Thimmayya J'ai essayé le code et tant que les flèches sont partis, les boutons sont toujours là. Je viens de modifier ma question pour spécifier la suppression du bouton. Merci pour l'idée cependant. – asawilliams

2
class NoArrowScrollBarUI extends BasicScrollBarUI { 


protected JButton createZeroButton() { 
    JButton button = new JButton("zero button"); 
    Dimension zeroDim = new Dimension(0,0); 
    button.setPreferredSize(zeroDim); 
    button.setMinimumSize(zeroDim); 
    button.setMaximumSize(zeroDim); 
    return button; 
} 

@Override 
protected JButton createDecreaseButton(int orientation) { 
    return createZeroButton(); 
} 

@Override 
protected JButton createIncreaseButton(int orientation) { 
    return createZeroButton(); 
} 


@Override 
protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) { 
    //own painting if needed 
} 

@Override 
protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) { 
    //own painting if needed 
} 

}

boutons Suppression de laisser l'espace pour ensuite. J'ai trouvé que faire des boutons zéro comme le moyen le plus simple.

+0

Cela fonctionne parfaitement !!! –

0

Il n'est pas la façon la plus élégante ... mais fonctionne pour moi

JScrollBar jsb = getHorizontalScrollBar(); 
     for(Component c : jsb.getComponents()) { 
      jsb.remove(c); 
     }