2010-05-16 22 views
5

Giống như nhiều con chuột và bàn di chuột hiện đại, máy tính xách tay của tôi hỗ trợ cuộn dọc và ngang. Đó là một tính năng gây nghiện khi bạn quen với nó. Tôi chỉ đơn giản muốn các ứng dụng Java của tôi hỗ trợ di chuyển ngang qua trackpad/mousewheel, nhưng ở khắp mọi nơi tôi tìm kiếm có vẻ như điều này là không thể trong Java. hành viLàm thế nào để sử dụng bàn di chuột của tôi để cuộn con lăn ngang trong một thanh cuộn Java AWT

Tôi thực sự muốn ai đó nói với tôi rằng tôi không hiểu làm nó sai, tính năng này đã được yêu cầu: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6440198

Không có khả năng để làm điều đơn giản này thực sự là một đối phó breaker cho ứng dụng Tôi làm việc trên. Trong thực tế, đối với bất kỳ ứng dụng tôi có thể hình dung! Tôi đã đầu tư một chút thời gian vào chương trình phụ trợ Java, vì vậy tôi thực sự muốn tìm một giải pháp cho điều dường như đơn giản này.

Câu hỏi là tôi có thể làm gì để thực hiện hành vi này? Có phải các sự kiện cấp hệ điều hành thô thậm chí còn tiếp xúc với tôi bởi java, sau đó tôi có cần phải viết điều này từ đầu không?

import java.awt.*; 

public class ScrollExample extends Canvas { 

    public void paint(Graphics g) { 

     g.setColor(Color.green); 
     g.fillOval(0,0,400, 400); 

    } 

    public static void main(String[] args) { 

     ScrollExample b = new ScrollExample(); 
     Frame f = new Frame ("Scroll Example"); 

     ScrollPane scroller = new ScrollPane (ScrollPane.SCROLLBARS_ALWAYS); 
     scroller.add(b,"Center"); 
     f.setPreferredSize(new Dimension(500,500)); 
     f.add ("Center",scroller); 
     f.pack(); 
     f.show(); 

    } 

} 

Swing dụ làm việc với cả hai chiều ngang và dọc di chuyển

import java.awt.*; 
import javax.swing.*; 

public class ScrollExample extends JPanel { 

    public void paint(Graphics g) { 

     super.paint(g); 

     g.setColor(Color.green); 
     g.fillOval(0,0,400, 400); 

    } 

    public static void main(String[] args) { 

     JFrame f = new JFrame ("Scroll Example"); 
     ScrollExample p = new ScrollExample(); 
     p.setPreferredSize(new Dimension(1000, 1000)); 

     JScrollPane scroller = new JScrollPane(p,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
     scroller.getHorizontalScrollBar().setUnitIncrement(10); 
     scroller.getVerticalScrollBar().setUnitIncrement(10); 

     f.setPreferredSize(new Dimension(500,500)); 
     f.add (scroller,BorderLayout.CENTER); 
     f.pack(); 
     f.show(); 
    } 
} 

Trả lời

1

này được hỗ trợ theo mặc định trong Swing mặc dù scolling dọc có ưu tiên hơn cuộn ngang khi cả hai cuộn có thể nhìn thấy.

Tôi hy vọng phát triển mới sẽ được thực hiện trong Swing chứ không phải AWT.

Chỉnh sửa:

Bạn có thể sử dụng Mouse Wheel Controller để tùy chỉnh tốc độ cuộn. Tôi chưa bao giờ thử nó trên cuộn ngang, hãy cho tôi biết nếu nó hoạt động.

+0

Cảm ơn, Swing hoạt động, mặc dù chậm hơn AWT, nhưng đó có thể chỉ là cấu hình mặc định của bánh xe. Tôi đã thực sự muốn sử dụng AWT cho các điều khiển hệ điều hành, nhưng bây giờ tôi sẽ chuyển sang swing thay vào đó, hầu hết giao diện người dùng của tôi sẽ bị ghi đè bởi tôi. – blissapp

+0

Về nhận xét về cuộn chậm, hãy xem chỉnh sửa của tôi ở trên. – camickr

+0

Cảm ơn bạn đã cập nhật. Tôi đã thử rằng lớp Mouse Wheel Controller, nhưng nó làm cho Scrolling chậm chạp và giật trên phần cứng của tôi. Giải pháp cuối cùng của tôi là sử dụng phương thức setUnitIncrement() trên ScrollBars, tôi đã thêm các chi tiết vào đoạn mã trên. – blissapp

1

Sự kiện điều hướng trên bàn di chuột của MacBookPro được xử lý ngoài hộp. Lưu ý có một phương pháp trên JScrollPane để bật các sự kiện bánh xe: setWheelScrollingEnabled

Các vấn đề liên quan