2011-11-21 32 views
11

Tôi cần phải thiết kế thanh cuộn này cho tất cả scrollpanes tôi:Tuỳ chỉnh thiết kế JScollPane Java Swing

enter image description here

Với Java Swing. Tôi đang sử dụng Netbeans IDE. Giải pháp đơn giản nhất là gì?

Cảm ơn bạn rất nhiều.

Trân

+0

i đã không nhận được bạn. một scrollpane tự động chèn một thanh cuộn khi kích thước của phần tử nó chứa bị tổn hại. – gprathour

Trả lời

16

Bạn có thể tùy biến giao diện của một thành phần Swing bởi thiết lập một giao diện người dùng tùy chỉnh. Trong trường hợp của thanh cuộn một cửa sổ cuộn, bạn làm

scrollPane.getVerticalScrollBar().setUI(new MyScrollBarUI()); 

nơi MyScrollBarUI có nguồn gốc từ javax.swing.plaf.basic.BasicScrollBarUI. Để thực hiện việc này cho tất cả các thanh cuộn (không chỉ trong JScrollPane trường hợp), hãy gọi

UIManager.put("ScrollBarUI", "my.package.MyScrollBarUI"); 

trước khi bạn tạo bất kỳ thành phần Swing nào.

Trong MyScrollBarUI, bạn ghi đè lên các phương pháp sau đây:

public class MyScrollBarUI extends BasicScrollBarUI { 

    @Override 
    protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) { 
     // your code 
    } 

    @Override 
    protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) { 
     // your code 
    } 
} 

thanh cuộn của bạn là đồ họa rất đơn giản, vì vậy nó không phải là quá khó để thực hiện.

+1

Câu trả lời tuyệt vời cảm ơn bạn rất nhiều –

+0

paintTrack (Đồ họa g, JComponent c, Rectangle trackBounds) 'và' paintThumb' (cùng một phương thức chữ ký) trong [BasicScrollBarUI] (http://docs.oracle.com/javase/6/docs/api/javax/swing/plaf/ basic/BasicScrollBarUI.html) hoặc bạn có thể không thấy gì cả. – Nateowami

+0

Có thể không mã hóa 'mở rộng BasicScrollBarUI' nhưng để mở rộng lớp UI thanh cuộn hiện đang được sử dụng? Giống như 'mở rộng scrollBar.getUI(). GetClass()'? – Bowi

1

1) override JToolBar

2) hầu hết Custom Look and Feel overrode rằng

+1

mối quan hệ của thanh công cụ với thanh cuộn là ... ;-) Plus (sau tất cả là sáng thứ Hai): bạn ghi đè lên phương thức, các lớp được mở rộng (hoặc được triển khai) – kleopatra

0

Đừng quên rằng nếu bạn có kế hoạch để sử dụng UIManager để ghi đè lên tất cả các thanh cuộn như thế này

UIManager.put("ScrollBarUI", "my.custom.SimpleScrollBarUI"); 

sau đó lớp SimpleScrollBarUI bạn phải có phương pháp createUI, ví dụ:

public class SimpleScrollBarUI extends BasicScrollBarUI { 

    public static ComponentUI createUI(JComponent c) { 
     return new SimpleScrollBarUI(); 
    } 

    //... 

}