Tôi có JScrollPane chứa một số hình ảnh trong một hàng ngang. Nếu hàng hình ảnh quá dài đối với cổng xem, JScrollPane sẽ hiển thị thanh cuộn, giảm chiều cao của cổng xem. Tôi muốn thay đổi kích thước hình ảnh để phù hợp với cổng xem. Làm thế nào tôi có thể phát hiện rằng cổng xem đã thay đổi kích thước của nó? Thật không may, đăng ký xử lý sự kiện thay đổi dường như không hoạt động.Làm cách nào để phát hiện xem thanh cuộn của JScrollPane có thay đổi mức hiển thị không?
8
A
Trả lời
12
Sử dụng trình nghe thay đổi trên ViewPort có vẻ phù hợp với tôi. Đây là một bản demo nhỏ rằng:
import java.awt.BorderLayout;
import java.io.UnsupportedEncodingException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingWorker;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Main {
public static void main(String[] args) throws UnsupportedEncodingException {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new BorderLayout());
final JPanel buttons = new JPanel();
final JScrollPane pane = new JScrollPane(buttons);
pane.getViewport().addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
System.err.println("Change in " + e.getSource());
System.err.println("Vertical visible? " + pane.getVerticalScrollBar().isVisible());
System.err.println("Horizontal visible? " + pane.getHorizontalScrollBar().isVisible());
}
});
panel.add(pane);
frame.setContentPane(panel);
frame.setSize(300, 200);
frame.setVisible(true);
SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
for (int i = 0; i < 10; i++) {
Thread.sleep(800);
buttons.add(new JButton("Hello " + i));
buttons.revalidate();
}
return null;
}
};
worker.execute();
}
}
1
tôi đã sử dụng HierarchyBoundsListener
để phát hiện những thay đổi về kích thước của JScrollPane:
onAncestorResized(scroll, evt -> resizeYourImages());
Dưới đây là một phương pháp thuận tiện để gắn người nghe:
static void onAncestorResized(JComponent component, Consumer<HierarchyEvent> callback) {
component.addHierarchyBoundsListener(new HierarchyBoundsAdapter() {
@Override
public void ancestorResized(HierarchyEvent e) {
callback.accept(e);
}
});
}
Các vấn đề liên quan
- 1. Thay đổi kích cỡ JScrollPane chứa JPanel khi thanh cuộn xuất hiện
- 2. Đặt thanh cuộn trên JScrollPane
- 3. Có cách nào để hiển thị thanh cuộn của ListView mọi lúc không?
- 4. jqGrid - không hiển thị thanh cuộn
- 5. Thay đổi mức hiển thị của nhãn ASP.NET bằng JavaScript
- 6. cách hiển thị thanh cuộn ngang
- 7. Hãy thanh cuộn màn hình JScrollPane khi JList bên trong được thay đổi
- 8. Sự kiện cuộn của JScrollPane
- 9. Làm thế nào tôi có thể thay đổi màu sắc của thanh cuộn
- 10. Hiển thị thanh cuộn dọc Div
- 11. jqGrid - Có cách nào để luôn hiển thị thanh cuộn dọc không?
- 12. Làm cách nào để hiển thị thanh cuộn trên System.Windows.Forms.TextBox chỉ khi văn bản không vừa?
- 13. Đặt thanh cuộn dọc hiển thị
- 14. Làm thế nào để phát hiện sự thay đổi trong mạng với Khả năng hiển thị?
- 15. Làm cách nào để kiểm tra xem cuộn hiện có được hiển thị trong WPF DataGrid không?
- 16. Cách tốt nhất để phát hiện xem văn bản của TextView có bị thay đổi không?
- 17. android: Phát hiện mức âm thanh
- 18. Làm thế nào để phát hiện khi chiều cao của trang thay đổi?
- 19. cách tạo thanh cuộn GridView luôn hiển thị android 4.0.3
- 20. Làm cách nào để buộc JScrollPane chỉ cuộn dọc?
- 21. Thanh cuộn webkit CSS hiển thị/ẩn
- 22. Làm cách nào để cuộn một ngGrid để hiển thị lựa chọn hiện tại?
- 23. Làm cách nào để hiển thị thanh cuộn trên điều khiển PictureBox?
- 24. Vsplit làm thanh cuộn dọc được hiển thị (gvim)
- 25. JScrollPane - Cuộn trơn tru
- 26. Thay đổi kiểu thanh cuộn
- 27. Làm cách nào để phát hiện thay đổi trên thanh địa chỉ bằng JavaScript?
- 28. Làm cách nào để phát hiện xem một trang có được hiển thị hoàn toàn bằng jQuery không?
- 29. Làm cách nào để phát hiện xem âm lượng có được đặt thành tắt tiếng không?
- 30. Làm cách nào để có được mức âm thanh hiện tại của thiết bị đầu ra âm thanh hiện tại?
Okay , kỳ dị. Cảm ơn đã trả lời nhanh chóng. Tôi đã thử nó và nó thực sự hoạt động. Than ôi, bên trong ứng dụng của tôi, thêm một người nghe thay đổi không hoạt động. Tôi sẽ làm việc từ đây. – xmjx
Đối với một số kết quả đầu ra lý do lạ cho cả stdout và stderr không được hiển thị trong trình nghe. Vì vậy, về cơ bản nó là một vấn đề gỡ lỗi. Cảm ơn một lần nữa. – xmjx