2011-10-03 9 views
8

Tôi cần phải ẩn các nút mũi tên của java.awt.Scrollbar(VERTICAL) trong một ứng dụng AWT. Có ai biết cách này có thể đạt được không?Cách ẩn các nút mũi tên trong một JScrollBar

Tôi đã xem ví dụ here, nhưng mã chỉ ẩn các nút. Không gian trống cho các nút vẫn còn; nó không bị chiếm bởi thanh cuộn.

Để chính xác hơn, đây là ảnh chụp màn hình về những gì tôi nên đạt được. Tôi không biết phải đi theo hướng nào.

Cập nhật: Tôi đang tìm kiếm giải pháp trong AWT. Nhưng bây giờ tôi cũng mở lời đề nghị trong Swing.

desired effect

+2

Không giống như Swing, thành phần AWT không có một [nhìn pluggable & cảm thấy] (http://java.sun.com/products/jfc/tsc/articles/architecture/# pluggable). Bạn cần gì, AWT hoặc Swing? – trashgod

+0

Tôi cần sử dụng AWT .. :) – tiger

+0

Thanh cuộn 'được sử dụng để chọn giá trị hay là một phần của' ScrollPane'? Xem xét đặt ra một [sscce] (http://sscce.org/) cho thấy những gì bạn đã thử. – trashgod

Trả lời

8

Hãy thử điều này .. nó sẽ thay thế các nút thường xuyên trên Vertical ScrollBar với các nút có 0x0 trong kích thước.

Nó hạn chế cái nhìn của bạn và cảm thấy dù :(

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

Cập nhật: xin lỗi, đây là một giải pháp xoay

+0

nhờ Harry.this đã giúp tôi rất nhiều.Tôi sẽ chấp nhận câu trả lời .. – tiger

3

Sử dụng Nimbus Look and Feel bạn có thể sử dụng để loại bỏ các nút mũi tên:

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

Dưới đây là ví dụ đầy đủ:

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

} 

Mã cho Painter sử dụng:

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

một lần một người đàn ông nói 'Tôi nghĩ rằng cách duy nhất để đi là ngừng sử dụng Nimbus', hmmm tiến bộ tốt đẹp + 1 – mKorbel