2011-10-03 9 views
8

Potrzebuję ukryć przyciski strzałek java.awt.Scrollbar(VERTICAL) w aplikacji AWT. Czy ktoś wie, jak można to osiągnąć?Jak ukryć przyciski strzałek w JScrollBar

Widziałem przykład here, ale kod po prostu ukrywa przyciski. Puste miejsce na guziki nadal pozostaje; nie jest zajęte przez pasek przewijania.

Oto przykład tego, co powinienem zrobić. Nie jestem pewien, w jakim kierunku się do tego zabrać.

Aktualizacja: Szukałem rozwiązania w AWT. Ale teraz jestem otwarty na sugestie w Swingu.

desired effect

+2

przeciwieństwie Swing komponenty AWT nie mają [podłączany wygląd i poczuć] (http://java.sun.com/products/jfc/tsc/articles/architecture/# pluggable). Czego potrzebujesz, AWT lub Swing? – trashgod

+0

Potrzebuję użyć AWT .. :) – tiger

+0

Czy "Scrollbar" jest używany do wyboru wartości lub jako część 'ScrollPane'? Rozważ umieszczenie [sscce] (http://sscce.org/), która pokazuje, co próbujesz. – trashgod

Odpowiedz

8

Spróbuj .. zastępuje regularnych przycisków na pionowy pasek przewijania z przyciskami, które są w rozmiarze 0x0.

To ogranicza swój wygląd i poczuć się choć :(

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

Aktualizacja: Niestety, jest to rozwiązanie huśtawka

+0

dzięki Harry.To bardzo mi pomogło. Przyjmę odpowiedź .. – tiger

3

Korzystanie Nimbus Look and Feel można to wykorzystać, aby usunąć przyciski strzałek:

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

Oto pełny przykład:

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

} 

kod na Painter używane:

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

raz jeden mężczyzna powiedział "Myślę, że jedynym sposobem, aby przejść jest, aby przestać używać Nimbus', hmmm miły postęp + 1 – mKorbel

Powiązane problemy