2015-09-13 3 views
3

Итак, у меня есть JButton s, и мне нужно изменить размер шрифта в зависимости от того, насколько велика величина экрана. Размер JButton s изменяется автоматически, так как я использую макет GridLayout. Я пробовал некоторые из следующего кода, работающий в теме:Изменение размера шрифта в соответствии с размером экрана

@Override 
    public void run() { 
     int i = 0; 
     int l = 0; 
     while(true) { 
      for(int x=0; x<buttons.length; x++) { 
       while(true) { 
        int size = 300; 
        size--; 
        Font font = buttons[x].getFont().deriveFont((float) size); 
        if(font.canDisplayUpTo(buttons[x].getText()) == 1) { 
         buttons[x].setFont(font); 
         o(font.getSize()); 
         break; 
        } 
       } 
       buttons[x].setText(String.valueOf(l)); 

      } 
      l++; 
      try { 
       Thread.sleep(100); 
      } catch (InterruptedException ex) {} 
     } 
    } 
+1

Вы можете добавить ['ComponentListener'] (http://docs.oracle.com/javase/tutorial/uiswing/events/componentlistener.html) к кадру, а не к потоку, и переопределить его метод« componentResized ». –

ответ

3

, чтобы получить использование размера экрана это

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
double width = screenSize.getWidth(); 
double height = screenSize.getHeight(); 

и установить использование размера кремневыми это в зависимости от ширины или высоты

button.setFont(new Font("Arial", Font.PLAIN, (int)width/50)); 

редактировать

или если вам вновь пытается изменить размер шрифта в зависимости от того, когда ваш компонент изменяет размер

implement ComponentListener 

затем

frame.addComponentListener(this); 

и методы для ответа на ComponentListener

public void componentHidden(ComponentEvent e) { 

    } 

    public void componentMoved(ComponentEvent e) { 

    } 

    public void componentResized(ComponentEvent e) { 
      int width = frame.getWidth(); 
      button.setFont(new Font("Arial", Font.PLAIN, width/25)); 
      frame.getContentPane().revalidate(); 

    } 

    public void componentShown(ComponentEvent e) { 

    } 
+0

(1+) Да, это работает. Но я все еще не уверен, действительно ли он имеет размер монитора или размер рамки, потому что для настройки шрифта в зависимости от размера экрана не нужен поток. –

+0

Он означает, что при изменении размера окна изменяется размер шрифта. – Okx

+0

Думаю, я должен удалить это, он сказал, что размер экрана haha ​​ – JRowan

4

JRowan является правильным, если вы имеете в виду монитор размер. Так как я до сих пор не уверен, если это то, что вы имеете в виду, вот пример использования ComponentListener и изменение размера по отношению к размерукадра, а не размер монитора:

import java.awt.EventQueue; 
import java.awt.Font; 
import java.awt.GridLayout; 
import java.awt.event.ComponentEvent; 
import java.awt.event.ComponentListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.WindowConstants; 

public class Example { 

    public Example() { 

     JFrame frame = new JFrame(); 
     JButton button = new JButton("Button"); 

     frame.addComponentListener(new ComponentListener() { 

      @Override 
      public void componentHidden(ComponentEvent arg0) { 
      } 

      @Override 
      public void componentMoved(ComponentEvent arg0) { 
      } 

      @Override 
      public void componentResized(ComponentEvent arg0) { 
       int width = frame.getWidth(); 
       int height = frame.getHeight(); 
       button.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, (width + height)/25)); 
       frame.getContentPane().revalidate(); 
      } 

      @Override 
      public void componentShown(ComponentEvent e) { 

      } 
     }); 

     frame.getContentPane().setLayout(new GridLayout(1, 1)); 
     frame.getContentPane().add(button); 

     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     frame.setSize(300, 300); 
     frame.setVisible(true); 

    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new Example(); 
      } 
     }); 
    } 

} 
+1

См. также [этот пример] (http://stackoverflow.com/а/21066065/418556) .. –

Смежные вопросы