2011-10-03 12 views
8

Necesito ocultar los botones de flecha de java.awt.Scrollbar(VERTICAL) en una aplicación AWT. ¿Alguien sabe cómo se puede lograr esto?Cómo ocultar los botones de flecha en una JScrollBar

Vi un ejemplo here, pero el código solo oculta los botones. El espacio vacante para los botones aún permanece; no está ocupado por la barra de desplazamiento.

Para ser más exactos, aquí está la captura de pantalla de lo que debería lograr. No estoy seguro de qué dirección tomar.

Actualización: Estaba buscando una solución en AWT. Pero ahora estoy abierto a sugerencias en Swing también.

desired effect

+2

A diferencia de Swing, componentes AWT no tienen un [enchufable mirada y se sienten] (http://java.sun.com/products/jfc/tsc/articles/architecture/# pluggable). ¿Qué necesitas, AWT o Swing? – trashgod

+0

Necesito usar AWT .. :) – tiger

+0

¿Se utiliza la 'Barra de desplazamiento' para la selección del valor o como parte de un' ScrollPane'? Considera presentar una [sscce] (http://sscce.org/) que muestre lo que has intentado. – trashgod

Respuesta

8

Prueba esto .. que sustituye los botones regulares en la barra de desplazamiento vertical con botones que son de tamaño 0x0.

sí limita su apariencia, aunque :(

JScrollPane scroller = new JScrollPane(mainPane); 
scroller.setPreferredSize(new Dimension(200,200)); 
// ... etc 
scroller.getVerticalScrollBar().setUI(new BasicScrollBarUI() 
    { 
     @Override 
     protected JButton createDecreaseButton(int orientation) { 
      return createZeroButton(); 
     } 

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

     private JButton createZeroButton() { 
      JButton jbutton = new JButton(); 
      jbutton.setPreferredSize(new Dimension(0, 0)); 
      jbutton.setMinimumSize(new Dimension(0, 0)); 
      jbutton.setMaximumSize(new Dimension(0, 0)); 
      return jbutton; 
     } 
    }); 

Actualización: lo siento, esta es una solución oscilación

+0

gracias Harry. Esto me ayudó mucho. Aceptaré la respuesta. – tiger

3

Usando Nimbus Look and Feel puede utilizar esto para eliminar los botones de flecha:

UIManager.getLookAndFeelDefaults().put(
     "ScrollBar:\"ScrollBar.button\".size", 0); 
    UIManager.getLookAndFeelDefaults().put(
     "ScrollBar.decrementButtonGap", 0); 
    UIManager.getLookAndFeelDefaults().put(
     "ScrollBar.incrementButtonGap", 0); 

Aquí hay un ejemplo completo:

enter image description here

public class ScrollDemo extends JFrame { 

    public ScrollDemo() { 

     String[] columnNames = {"Column"}; 
     Object[][] data = { 
       {"A"},{"B"},{"C"},{"D"},{"E"},{"F"}, 
       {"A"},{"B"},{"C"},{"D"},{"E"},{"F"}, 
       {"A"},{"B"},{"C"},{"D"},{"E"},{"F"}, 
       {"A"},{"B"},{"C"},{"D"},{"E"},{"F"}, 
       {"A"},{"B"},{"C"},{"D"},{"E"},{"F"}, 
     }; 

     add(new JScrollPane(new JTable(data, columnNames))); 
     pack(); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 

       try { 
        UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel"); 
       } catch (Exception e) { 
        // No Nimbus 
       } 
       UIManager.getLookAndFeelDefaults().put(
         "ScrollBar:ScrollBarThumb[Enabled].backgroundPainter", 
         new FillPainter(new Color(127, 169, 191))); 
       UIManager.getLookAndFeelDefaults().put(
         "ScrollBar:ScrollBarThumb[MouseOver].backgroundPainter", 
         new FillPainter(new Color(127, 169, 191))); 
       UIManager.getLookAndFeelDefaults().put(
         "ScrollBar:ScrollBarTrack[Enabled].backgroundPainter", 
         new FillPainter(new Color(190, 212, 223))); 

       UIManager.getLookAndFeelDefaults().put(
         "ScrollBar:\"ScrollBar.button\".size", 0); 
       UIManager.getLookAndFeelDefaults().put(
         "ScrollBar.decrementButtonGap", 0); 
       UIManager.getLookAndFeelDefaults().put(
         "ScrollBar.incrementButtonGap", 0); 

       new ScrollDemo(); 
      } 
     }); 
    } 

} 

Código para la Painter utilizado:

public class FillPainter implements Painter<JComponent> { 

    private final Color color; 

    public FillPainter(Color c) { color = c; } 

    @Override 
    public void paint(Graphics2D g, JComponent object, int width, int height) { 
     g.setColor(color); 
     g.fillRect(0, 0, width-1, height-1); 
    } 

} 
+1

Una vez, un hombre dijo 'Creo que el único camino a seguir es dejar de usar Nimbus', hmmm nice progress + 1 – mKorbel

Cuestiones relacionadas