Có cách nào dễ dàng để khóa tỷ lệ khung hình của thành phần GridLayout trong Java Swing không? Hoặc điều này có nên được thực hiện trên JPanel có chứa bố cục đó không?Làm thế nào để khóa tỉ lệ khung hình của một GridLayout trong Java?
5
A
Trả lời
7
GridLayout
bỏ qua hiệu quả kích thước ưa thích của một thành phần, nhưng bạn có thể kiểm soát aspect ratio bất kỳ thứ gì được vẽ trong paintComponent()
, như được hiển thị trong example này. Hình dạng kết xuất vẫn tròn (khía cạnh 1: 1), trong khi (gần) làm đầy thùng chứa ở kích thước hẹp nhất. Thay đổi kích thước khung hình để xem hiệu ứng.
Phụ lục: Ví dụ: tôi đã thêm N * N
trường hợp CirclePanel
vào GridLayout
bên dưới.
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.*;
/**
* @see https://stackoverflow.com/a/9858355/230513
* @see https://stackoverflow.com/a/3538279/230513
*/
public class SwingPaint {
private static final int N = 4;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.setLayout(new GridLayout(N, N));
for (int i = 0; i < N * N; i++) {
frame.add(new CirclePanel());
}
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
});
}
private static class CirclePanel extends JPanel {
private static final Random r = new Random();
public CirclePanel() {
this.setPreferredSize(new Dimension(80, 80));
this.setForeground(new Color(r.nextInt()));
this.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
CirclePanel.this.update();
}
});
}
public void update() {
this.setForeground(new Color(r.nextInt()));
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Dimension size = this.getSize();
int d = Math.min(size.width, size.height) - 10;
int x = (size.width - d)/2;
int y = (size.height - d)/2;
g.fillOval(x, y, d, d);
g.setColor(Color.blue);
g.drawOval(x, y, d, d);
}
}
}
Các vấn đề liên quan
- 1. Nhận tỉ lệ co của video từ FFmpeg
- 2. Làm thế nào để sử dụng lề và đệm với Java GridLayout
- 3. Làm cách nào để tăng tốc độ khung hình của tôi ở tốc độ 60 khung hình/giây trong Java?
- 4. Làm thế nào để thay thế nội dung của ô lưới trong SWT GridLayout?
- 5. Làm thế nào để wait() lấy lại Khóa trong Java
- 6. Làm cách nào để hiển thị đường lưới trong GridLayout?
- 7. Tỷ lệ khung hình trong UIImageView
- 8. Java Swing GridLayout "Cell span"?
- 9. Tỷ lệ khung hình của một hình tam giác của một bề mặt có lưới
- 10. HTML/IE: image căng để phù hợp, duy trì tỉ lệ
- 11. Làm thế nào để có được một chìa khóa ModelState của một mục trong danh sách
- 12. Làm thế nào để trích xuất một phần của hình ảnh này trong Java?
- 13. Luồng trong Java: Làm thế nào để khóa một đối tượng?
- 14. Tỷ lệ khung hình OpenGl
- 15. Làm thế nào để khóa trong một bộ xương
- 16. Làm thế nào để chuyển đổi một bộ sưu tập java của hình ảnh để CvArr
- 17. Làm thế nào để chạy một khung công tác OSGi trong mã java thông thường?
- 18. Làm thế nào để cấu hình bộ nhớ trong Java?
- 19. Tỉ lệ UIView bằng 0 khi sử dụng CGAffineTransformMakeScale
- 20. Làm thế nào để chuyển đổi một khung hình FFMPEG AVFrame trong YUVJ420P thành AVFoundation cVPixelBufferRef?
- 21. Làm cách nào để thay đổi điều kiện tỷ lệ khung hình của biểu đồ trong gói Sáng bóng của R?
- 22. Làm thế nào để kích hoạt khung nền của Bootstrap?
- 23. java - làm thế nào để lưu trữ một chìa khóa trong keystore
- 24. Làm thế nào để làm chủ Java?
- 25. Làm thế nào để ẩn một khung phụ của một UIView?
- 26. Làm cách nào để ký một applet Java bằng chứng chỉ trong khóa Mac của tôi?
- 27. Làm thế nào để tuyên truyền một ngoại lệ trong java
- 28. C#: Cách tính tỷ lệ khung hình
- 29. Làm thế nào để có một khung lớn vô cùng?
- 30. Hai bố trí cho hai tỉ lệ (4: 3 và 16: 9) - thay đổi tự động
Cần phải có một cái gì đó mà bạn không có bất kỳ Ví dụ, tôi tự hỏi !!!! :-) –
Tôi là người hâm mộ của [sscce] (http://sscce.org/). :-) – trashgod
OK, vì vậy công cụ phải được thực hiện trong paintComponent. Được chơi xung quanh, vẫn còn havent giải quyết vấn đề. Tại thời điểm này, tôi đang xem xét việc đặt lưới của tôi trong một JPanel trung gian (JPanel -> trung gian JPanel -> GridLayout). Tôi đang cố gắng kiểm soát kích thước của JPanel trung gian này trong paintComponent của JPanel gốc. Bạn cảm thấy sao về việc ấy ? Havent đã làm việc chưa ... – Jerome