Tôi có một JScrollPane có khung nội dung là một JXList. Khi tôi sử dụng bánh xe chuột trên danh sách, danh sách sẽ thực hiện ba (3) mục mỗi lần. Điều này cũng làm việc cho một bảng, bất kể chiều cao hàng. Làm thế nào tôi có thể thay đổi điều này để - bất kể nền tảng - cho cả danh sách và bảng khoảng cách di chuyển chính xác là 1 mục? Thiết lập tăng khối không cắt nó bởi vì một số hàng trong bảng có chiều cao khác nhau.Làm thế nào để làm cho JScrollPane cuộn 1 dòng cho mỗi bước bánh xe chuột?
Trả lời
Ra quan tâm tinh khiết (và một chút chán nản) Tôi tạo ra một ví dụ làm việc:
/**
* Scrolls exactly one Item a time. Works for JTable and JList.
*
* @author Lukas Knuth
* @version 1.0
*/
public class Main {
private JTable table;
private JList list;
private JFrame frame;
private final String[] data;
/**
* This is where the magic with the "just one item per scroll" happens!
*/
private final AdjustmentListener singleItemScroll = new AdjustmentListener() {
@Override
public void adjustmentValueChanged(AdjustmentEvent e) {
// The user scrolled the List (using the bar, mouse wheel or something else):
if (e.getAdjustmentType() == AdjustmentEvent.TRACK){
// Jump to the next "block" (which is a row".
e.getAdjustable().setBlockIncrement(1);
}
}
};
public Main(){
// Place some random data:
Random rnd = new Random();
data = new String[120];
for (int i = 0; i < data.length; i++)
data[i] = "Set "+i+" for: "+rnd.nextInt();
for (int i = 0; i < data.length; i+=10)
data[i] = "<html>"+data[i]+"<br>Spacer!</html>";
// Create the GUI:
setupGui();
// Show:
frame.pack();
frame.setVisible(true);
}
private void setupGui(){
frame = new JFrame("Single Scroll in Swing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
frame.add(split);
// Add Data to the table:
table = new JTable(new AbstractTableModel() {
@Override
public int getRowCount() {
return data.length;
}
@Override
public int getColumnCount() {
return 1;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return data[rowIndex];
}
});
for (int i = 0; i < data.length; i+=10)
table.setRowHeight(i, 30);
JScrollPane scroll = new JScrollPane(table);
// Add out custom AdjustmentListener to jump only one row per scroll:
scroll.getVerticalScrollBar().addAdjustmentListener(singleItemScroll);
split.add(scroll);
list = new JList<String>(data);
scroll = new JScrollPane(list);
// Add out custom AdjustmentListener to jump only one row per scroll:
scroll.getVerticalScrollBar().addAdjustmentListener(singleItemScroll);
split.add(scroll);
}
public static void main(String[] agrs){
new Main();
}
}
Sự kỳ diệu thực được thực hiện trong tùy chỉnh AdjustmentListener
, nơi chúng tôi đi và tăng hiện nay "di chuyển vị trí" bởi một khối duy nhất mỗi lần. Điều này hoạt động lên và xuống và với các kích thước hàng khác nhau, như được hiển thị trong ví dụ.
Như @kleopatra đề cập trong các ý kiến, bạn cũng có thể sử dụng một MouseWheelListener
chỉ xác định lại hành vi của chuột bánh.
Xem hướng dẫn chính thức here.
Điều này khá tuyệt vời. Cảm ơn rất nhiều! Tôi có nghĩa là, chắc chắn, có/có thể/là một .setScrollIncrement (int i) một nơi nào đó, nhưng cách này nó hoạt động, quá. Chỉ cần một đoạn ngắn sang một bên: Mã này làm cho tính năng trang của thanh cuộn (nhấp vào thanh bên ngoài tay cầm), cuộn các bước em bé, mà không phải là siêu lạ xem xét mã của bạn đặt khối tăng lên 1 "trên toàn cầu". Có cách nào để thay đổi kích thước bước bánh xe chuột không? Ngoài ra, bạn có thể giới thiệu một cuốn sách về Swing không? – xmjx
Ah, phải bình luận thêm một chút. Tôi đã tò mò tại sao setBlockIncrement (1) phải được gọi mỗi khi AdjustmentListener được gọi, vì vậy tôi đã vô hiệu hóa trình nghe và gọi setBlockIncrement (1) một lần tại thời điểm tạo cửa sổ cuộn. Kìa! Điều này cũng hoạt động với cùng tác dụng phụ không mong muốn. Tôi không thể nhớ được hiệu ứng này là gì ở máy văn phòng của tôi nên tôi sẽ kiểm tra điều này vào ngày mai. Đôi khi tôi không thích Swing. ;-) – xmjx
@xmjx cho swing, chỉ cần đọc các hướng dẫn được cung cấp bởi mặt trời/oracle. Tôi đã không đọc một cuốn sách dành riêng cho điều đó. Swing là khá mạnh mẽ, nhưng nó cũng không phải là khuôn khổ GUI nhỏ nhất. –
- 1. jQuery - jScrollPane với AJAX: bánh xe chuột không hoạt động
- 2. Làm thế nào để nghe máy ép bánh xe chuột?
- 3. bánh xe chuột không cuộn trong tmux
- 4. Làm thế nào để thiết lập tốc độ cuộn bánh xe chuột trong IntelliJ?
- 5. WPF: Làm cách nào để cho phép cuộn bằng bánh xe chuột trong ListView trong khi kéo các mục ListView?
- 6. Cuộn ngang với bánh xe chuột tại Visual Studio
- 7. Phát video html5 bằng cách cuộn bằng bánh xe chuột
- 8. Cách tắt hành vi sơn mặc định của sự kiện cuộn bánh xe trên JScrollPane
- 9. Phím điều khiển và bánh xe chuột
- 10. Làm thế nào để vô hiệu hóa nút bấm bánh xe chuột?
- 11. Cuộn trang dọc mượt mà bằng cách sử dụng bánh xe chuột và thanh cuộn
- 12. Chụp sự kiện bánh xe cuộn
- 13. Làm thế nào tôi có thể xử lý sự kiện bấm bánh xe chuột trong WPF?
- 14. Thông báo gửi bánh xe chuột đến điều khiển sai
- 15. Sử dụng bánh xe cuộn trong màn hình GNU
- 16. Tìm giá trị trên bánh xe cho bánh xe của tài sản
- 17. Xóa chức năng cuộn trên bánh xe chuột Khung nhìn QGraphics
- 18. Làm cách nào để buộc JScrollPane chỉ cuộn dọc?
- 19. Javascript: Chụp sự kiện bánh xe chuột và không cuộn trang?
- 20. Chrome và IE: thị sai (jQuery animate) không mượt mà khi sử dụng bánh xe chuột để cuộn
- 21. Làm cách nào để tăng tốc độ cuộn chậm trên JScrollPane?
- 22. Làm cách nào để tôi có thể làm cho các sự kiện di chuột kích hoạt cuộn trang?
- 23. Bánh xe cuộn chuột dọc không hoạt động trong VS 2010 Ultimate
- 24. Giá trị delta của bánh xe chuột luôn 120
- 25. Sự kiện bánh xe chuột để hoạt động với điều khiển lơ lửng
- 26. Tại sao sự kiện cuộn bánh xe không kích hoạt khi chuột ở trên phần tử "vị trí: cố định"?
- 27. Làm thế nào để vẽ một bánh xe màu trong mục tiêu-c
- 28. Linux dòng lệnh: du --- làm thế nào để làm cho nó chỉ hiển thị tổng số cho mỗi thư mục
- 29. Cách gọi hàm khi người dùng sử dụng bánh xe chuột để cuộn lên/xuống trong javascript
- 30. Làm thế nào để cuộn chuột với Git Bash?
@trashgod đã không tìm kiếm trong một thời gian - bánh xe thực sự có vẻ bản đồ để các đơn vịKhả năng nào đó, và không xử lý chiều cao hàng cá nhân, do đó, đã sai với sự nghi ngờ của tôi. Tinh chỉnh việc triển khai có thể cuộn có thể giúp, sau khi tất cả :-) – kleopatra
Xem Camickr [Chuột điều khiển bánh xe] (http://tips4java.wordpress.com/2010/01/10/mouse-wheel-controller/) – aterai
@aterai hach .. quên rằng một :-) Chắc chắn là con đường để đi, hãy xem xét làm cho bình luận của bạn một câu trả lời, để lấy một số phiếu thực sự. – kleopatra