Bất cứ khi nào tôi bấm vào một JSlider nó được định vị một majorTick theo hướng nhấp chuột thay vì nhảy đến chỗ tôi thực sự nhấp vào. (Nếu thanh trượt ở điểm 47 và tôi bấm 5 nó sẽ nhảy tới 37 thay vì 5). Có cách nào để thay đổi điều này trong khi sử dụng JSliders, hoặc tôi phải sử dụng một datastructure?Câu hỏi JSlider: Vị trí sau khi nhấp chuột trái
Trả lời
Như kỳ lạ như điều này có vẻ, nó thực sự là Look and Feel kiểm soát hành vi này. Hãy xem BasicSliderUI
, phương pháp bạn cần ghi đè là scrollDueToClickInTrack(int)
.
Để đặt giá trị của JSlider
thành giá trị gần nhất cho nơi người dùng nhấp vào bản nhạc, bạn cần thực hiện một số dịch chuyển ưa thích giữa các tọa độ chuột từ getMousePosition()
đến giá trị bản nhạc hợp lệ. chiếm vị trí của Component
, đó là hướng, kích thước và khoảng cách giữa các dấu tích vv. May mắn thay, BasicSliderUI
cho chúng ta hai chức năng tiện dụng để làm điều này: valueForXPosition(int xPos)
và valueForYPosition(int yPos)
:
JSlider slider = new JSlider(JSlider.HORIZONTAL);
slider.setUI(new MetalSliderUI() {
protected void scrollDueToClickInTrack(int direction) {
// this is the default behaviour, let's comment that out
//scrollByBlock(direction);
int value = slider.getValue();
if (slider.getOrientation() == JSlider.HORIZONTAL) {
value = this.valueForXPosition(slider.getMousePosition().x);
} else if (slider.getOrientation() == JSlider.VERTICAL) {
value = this.valueForYPosition(slider.getMousePosition().y);
}
slider.setValue(value);
}
});
Hành vi này có nguồn gốc từ hệ điều hành. Bạn có chắc chắn muốn xác định lại và gây nhầm lẫn cho người dùng không? Tôi không nghĩ vậy. ;)
Câu hỏi này là loại cũ, nhưng tôi chỉ chạy qua vấn đề này bản thân mình. Đây là giải pháp của tôi:
JSlider slider = new JSlider(/* your options here if desired */) {
{
MouseListener[] listeners = getMouseListeners();
for (MouseListener l : listeners)
removeMouseListener(l); // remove UI-installed TrackListener
final BasicSliderUI ui = (BasicSliderUI) getUI();
BasicSliderUI.TrackListener tl = ui.new TrackListener() {
// this is where we jump to absolute value of click
@Override public void mouseClicked(MouseEvent e) {
Point p = e.getPoint();
int value = ui.valueForXPosition(p.x);
setValue(value);
}
// disable check that will invoke scrollDueToClickInTrack
@Override public boolean shouldScroll(int dir) {
return false;
}
};
addMouseListener(tl);
}
};
không phải giải pháp này có nghĩa là bạn không còn có thể sử dụng bánh xe cuộn để di chuyển thanh trượt không? – ninesided
+1, tôi đã thực hiện một thay đổi nhỏ để xóa và thêm MouseMotionListener. Điều này tạo ra một sự thay đổi nhỏ về mỹ phẩm ở chỗ con chuột sẽ vẫn ở giữa trong ngón cái trượt khi bạn kéo ngón tay cái thay vì nhảy sang cạnh trái của ngón cái. – camickr
- 1. Di chuyển chuột đến vị trí và nhấp chuột trái
- 2. Câu hỏi về dịch vụ vị trí nền iPhone 4
- 3. leaflet.js - Đặt điểm đánh dấu khi nhấp chuột, cập nhật vị trí khi kéo
- 4. cách nhận vị trí nhấp chuột trong onClickListener?
- 5. Nhận vị trí chuột trong khi di chuột xuống?
- 6. Đặt vị trí chuột
- 7. jQuery - Nhận vị trí chuột trong khi kéo liên kết
- 8. Vị trí Chuột C# XNA
- 9. Làm cách nào để lấy thành phần ở vị trí nhấp chuột khi sử dụng TableCellEditor?
- 10. Chuột vị trí trong D3
- 11. addGlobalMonitorForEventsMatchingMask chỉ trả lại vị trí chuột
- 12. Vị trí chuột trong java
- 13. Cách xóa Thuộc tính trái khi vị trí: tuyệt đối?
- 14. Nhấp chuột phải vào hoạt động khác với nhấp chuột trái
- 15. onMouseMove có vị trí chuột
- 16. Cách nhận vị trí của một lần nhấp?
- 17. Vị trí con trỏ chuột CKEditor sau khi chèn phần tử không thể chỉnh sửa
- 18. đặt lại vị trí div dựa trên vị trí nhấp
- 19. Câu hỏi SQL bên trong vs bên trái
- 20. Thay đổi vị trí chuột khi hộp xem được thêm
- 21. Câu hỏi thiết kế trò chơi OO
- 22. Nhận vị trí chuột trong div có thể cuộn
- 23. Lấy vị trí chuột trong khi kéo và thả
- 24. Câu hỏi về văn bản sau iframe
- 25. Objective-C: NSStatusBar phải và trái nhấp chuột
- 26. Vị trí chỉ thị góc trái/trên của liên kết Angularjs sau khi kéo với ng-repeat
- 27. Điều chỉnh vị trí UIPopoverController sau khi đổi kích thước
- 28. R ggplot2 facet_grid câu hỏi
- 29. Không chụp vào điểm đánh dấu sau khi nhấp chuột trong bản đồ android v2
- 30. Câu hỏi Qt: Các tín hiệu và vị trí hoạt động như thế nào?
Đó là loại kỳ lạ, bắt mắt. Đang cố gắng tìm ra cách đầu vào cho scrollDue .. (int) được tạo ra. Đối với hướng được xác định phải có một số kiểm tra nơi tôi nhấp vào trượt trượt so sánh. Đối với điều đó để được xác định sẽ không một số phương pháp cần biết chính xác nơi trên thanh trượt tôi bấm? –
không thực sự, hướng là dễ dàng - cho một theo dõi ngang nó chỉ cần biết rằng x phối hợp của nhấp chuột là ít hơn hoặc lớn hơn x phối hợp của thanh trượt xử lý. – ninesided
Vâng, nhưng để biết nếu nó nhỏ hơn hoặc lớn hơn tọa độ X, bạn sẽ không cần biết vị trí trên thanh trượt bạn nhấp để so sánh? Nếu điều khiển thanh trượt ở mức 50, bạn cần phải biết vị trí bạn nhấp để xem vị trí đó là> hoặc <50, không? –