Entonces, lo que estoy tratando de hacer es cambiar el tamaño de la fuente de cada componente en un JFrame sabiendo que las fuentes tienen diferentes tamaños en el momento del lanzamiento.
Por ejemplo, tendría un JButton con un tamaño de fuente de 15 y un JLabel con un tamaño de fuente de 20:
button1.setFont(new Font("Arial", Font.PLAIN, 15)); label1.setFont(new Font("Arial", Font.PLAIN, 20));El resultado que quiero aquí es que si la ventana se redimensiona al doble de su ancho, los componentes deberían seguir al mismo ritmo, por lo que JButton sería 30 y JLabel sería 40.
Estoy usando un ComponentListener en JFrame pero no puedo encontrar cómo hacerlo. Esto es lo que tengo actualmente; si supiera el tamaño de la ventana ANTES de cambiar el tamaño, ya estaría funcionando, pero no creo que sea posible.
Aquí está el método de componente redimensionado anulado:
@Override public void componentResized(ComponentEvent arg0) { Component[] components = ((JFrame)arg0.getComponent()).getComponents(); System.out.println(((Component) arg0.getSource()).getSize().getWidth());//How do I find the window's size before it was resized ? //Getting standard window size Dimension dimScreen = Toolkit.getDefaultToolkit().getScreenSize(); Dimension dimBaseWindow = new Dimension(dimScreen.width/2,dimScreen.height/2); double baseWidth = dimBaseWindow.getWidth(); //Getting current window size Dimension dimCurrentWindow = ((JFrame)arg0.getComponent()).getSize(); double currentWidth = dimCurrentWindow.getWidth(); System.out.println(currentWidth); //Rate at which the font will be resized double resizeRate = currentWidth/baseWidth; resizeComponentsFonts(components, resizeRate, (int)currentWidth, (int)baseWidth); }método resizeComponentsFonts:
public void resizeComponentsFonts(Component[] components, double resizeRate, int newWindowWidth, int baseWindowWidth) { for(int i=0;i<components.length;i++) { if(components[i] instanceof JPanel || components[i] instanceof JLayeredPane || components[i] instanceof JRootPane) { resizeComponentsFonts(((Container)components[i]).getComponents(),resizeRate, newWindowWidth, baseWindowWidth); } else { //System.out.println((double)components[i].getFont().getSize()/newWindowWidth*baseWindowWidth); components[i].setFont(new Font(components[i].getFont().getFontName(),components[i].getFont().getStyle(),(int) (((double)components[i].getFont().getSize()/newWindowWidth*baseWindowWidth)*resizeRate))); } } }