Estas son mis observaciones (1,6 usados, ahora estoy usando 1.7 en XP):
se puede tener sin decorar marco de "casi" cualquier tamaño - uso una resolución de pantalla de 1280x1024 (rotada) y no noté ningún problema con el marco 1500x1500, aunque algunos cuadros 2000x2000 parecen incompletos (pero funcionan) y el marco de 4000x4000 muestra su pulgar en la barra de tareas, pero este pulgar es inactivo y el el propio cuadro no aparece. Creo que el mayor tamaño posible de JFrame no decorado depende de las capacidades del sistema, que depende del hardware gráfico.
Con marcos decorados hay una historia simple: pueden ser un poco más grandes que el tamaño de la pantalla (por unos pocos píxeles en general).
En mi solicitud con un tamaño determinado durante el tiempo de ejecución (por ejemplo juegos donde se define el tamaño del tablero de forma dinámica) utilizo el siguiente enfoque:
1). antes de empaquetar establecer la ubicación del marco relativo a nulo. Coloca la esquina superior izquierda de JFrame en el medio de la pantalla (antes de empacar, el JFrame está (0,0) dimensionado)
2). establecer los tamaños preferidos de mi contenido de fotograma (siempre uso JPanel único) y recordarlos
3). paquete el marco
4).si los tamaños de fotograma tras paquete no coinciden con los del paquete anterior, elimine el JPanel del contenido, agregue JScrollPane con este JPanel y establezca los tamaños preferidos de JScrollPane como tamaños preferidos de JPanel MÁS las dimensiones fijas de JScrollBar (es decir, el ancho de la barra de desplazamiento vertical y una altura de la horizontal).
5). empaquetar de nuevo: esto garantiza que solo aparezcan las barras de desplazamiento necesarias (si no aumenta los tamaños del JFrame, siempre aparecerán ambas barras de desplazamiento, también es necesario eliminar el borde predeterminado de JScrollPane).
6). Establezca una nueva ubicación del marco moviéndolo hacia la izquierda y hacia arriba por la mitad del tamaño correspondiente para centrarlo.
¿Cuál es el comportamiento previsto de una ventana más grande que la pantalla? – Thomas
@Thomas - enfureciendo al usuario final, creo ... – mcfinnigan
Este código solo funciona en mi máquina Linux – Robin