¿Hay alguna manera fácil de bloquear la relación de aspecto de un componente GridLayout en Java Swing? ¿O debería hacerse en el JPanel que contiene ese diseño?¿Cómo bloquear la relación de aspecto de un gridLayout en Java?
5
A
Respuesta
7
GridLayout
ignora efectivamente tamaño preferido de un componente, pero se puede controlar el aspect ratio de lo que está dibujado en paintComponent()
, como se muestra en este example. La forma representada sigue siendo circular (aspecto 1: 1), mientras que (casi) llena el contenedor en la dimensión más estrecha. Cambie el tamaño del marco para ver el efecto.
Adición: Por ejemplo, agregué N * N
instancias de CirclePanel
a GridLayout
a continuación.
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);
}
}
}
Cuestiones relacionadas
- 1. C#: Cómo calcular la relación de aspecto
- 2. Java tamaño de imagen, mantener la relación de aspecto
- 3. ¿Cómo puedo establecer la relación de aspecto en matplotlib?
- 4. Estimación de la relación de aspecto de un casco convexo
- 5. Android: Cómo mantener la relación de aspecto en animación
- 6. Cómo hacer zoom manteniendo la relación de aspecto correctamente
- 7. Configuración de la relación de aspecto de la trama 3D
- 8. matplotlib - subtramas con relación de aspecto fija
- 9. Relación de aspecto de un triángulo de una superficie mallada
- 10. Redimensionar UIImage con relación de aspecto?
- 11. webrtc - obtenga la relación de aspecto de la cámara web
- 12. Android Streaming Video - Necesita relación de aspecto
- 13. ImageMagick cambiar la relación de aspecto sin escalar la imagen
- 14. Redimensionar la imagen para ajustarla a la relación de aspecto
- 15. jQuery cambiar el tamaño a la relación de aspecto
- 16. Enhebrado en Java: cómo bloquear un objeto?
- 17. ¿Cómo mostramos la cuadrícula en GridLayout?
- 18. Java Swing GridLayout "Cell span"?
- 19. Cocos2d y la nueva relación de aspecto del iPhone 5
- 20. Escale un div para que quepa en la ventana pero preserve la relación de aspecto
- 21. Codeigniter que no mantiene la relación de aspecto
- 22. Cómo dibujar un Círculo de aspecto decente en Java
- 23. Cómo abrir una FancyBox con una determinada relación de aspecto
- 24. Cómo cambiar el aspecto de un JButton deshabilitado en java
- 25. ¿Qué aspecto tiene Java en la memoria?
- 26. Recorte de la imagen de relación de aspecto en la rejilla de respuesta de arranque
- 27. Parcela de tizón, relación de aspecto de flecha
- 28. Android: problema de relación de aspecto de video MediaPlayer
- 29. Cómo conservar la relación de aspecto de android: groupIndicator en ExpandableListView?
- 30. ¿Cómo puedo mantener la relación de aspecto en contenido escalable y desplazable en WPF?
Tiene que haber algo por lo que no tiene ningún ejemplo, me pregunto !!!! :-) –
Soy un fan de la [sscce] (http://sscce.org/). :-) – trashgod
OK, entonces las cosas deben hacerse en paintComponent. He estado jugando, todavía no he resuelto el problema. Por el momento, estoy buscando poner mi grilla en un JPanel intermediario (JPanel -> intermediario JPanel -> GridLayout). Estoy intentando controlar el tamaño de este JPanel intermediario en el componente paint del JPanel raíz. Cómo te sientes sobre eso ? Havent ya funcionaba ... – Jerome