2011-10-03 9 views
8

Ho bisogno di nascondere i pulsanti freccia di java.awt.Scrollbar(VERTICAL) in un'applicazione AWT. Qualcuno sa come questo può essere raggiunto?Come nascondere i pulsanti freccia in una JScrollBar

Ho visto un esempio here, ma il codice nasconde semplicemente i pulsanti. Lo spazio vuoto per i pulsanti rimane ancora; non è occupato dalla barra di scorrimento.

Per essere più precisi, ecco lo screenshot di ciò che dovrei ottenere. Non sono sicuro di quale direzione prendere.

Aggiornamento: stavo cercando una soluzione in AWT. Ma ora sono aperto a suggerimenti anche su Swing.

desired effect

+2

A differenza di swing, componenti AWT non hanno un [sguardo pluggable & feel] (http://java.sun.com/products/JFC/TSC/articoli/architettura/# pluggable). Di cosa hai bisogno, AWT o Swing? – trashgod

+0

Devo usare AWT .. :) – tiger

+0

La 'Barra di scorrimento' è utilizzata per la selezione del valore o come parte di un' ScrollPane'? Considera di posare un [sscce] (http://sscce.org/) che mostra ciò che hai provato. – trashgod

risposta

8

Prova questo .. sostituisce i normali tasti della barra di scorrimento verticale con i tasti che si trovano 0x0 di dimensioni.

Si limita il vostro look and feel però :(

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; 
     } 
    }); 

Aggiornamento: dispiace, questa è una soluzione un'altalena

+0

grazie Harry.questo mi ha aiutato molto. Accetterò la risposta .. – tiger

3

Usando Nimbus Look and Feel è possibile utilizzare questo per rimuovere i tasti freccia:

Ecco un esempio 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(); 
      } 
     }); 
    } 

} 

Codice in materia di Painter usato:

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 volta che un uomo ha detto "Penso che l'unico modo per andare è smettere di usare Nimbus', hmmm bel progresso + 1 – mKorbel

Problemi correlati