Próbuję automatycznie zwiększać/zmniejszać rozmiar czcionki tekstu JButton (jeśli JButton zwiększa/rozciąga się jego tekst również się zwiększy, jeśli JButton zmniejszy się jego tekst również się zmniejszy). Domyślną czcionką JButtonów będzie Sans-Serif, rozmiar 20 i nigdy nie może spaść poniżej 20 (może być 21, 30, 40 lub coś powyżej lub równego 20, ale nigdy poniżej 20). Mam JPanel, nazwany MenuJPanel, używa GridLayout do dodania 5 JButtonów, które zwiększą/zmniejszą rozmiar, gdy JPanel wzrośnie/zmarnie. Wybrałem GridLayout, ponieważ wygląda na najlepszy układ do tego celu, czy jestem w błędzie? Dodałem również komponentRozdzielony do MenuJPanel. Poniżej możesz zobaczyć mój kod, który częściowo działa.Jak automatycznie zwiększać lub zmniejszać rozmiar tekstu JButton na podstawie rozmiaru JButton?
public class MenuJPanel extends JPanel {
private JButton resizeBtn1;
private JButton resizeBtn2;
private JButton resizeBtn3;
private JButton resizeBtn4;
private JButton resizeBtn5;
public MenuJPanel() {
initComponents();
this.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
Font btnFont = resizeBtn1.getFont();
String btnText = resizeBtn1.getText();
int stringWidth = resizeBtn1.getFontMetrics(btnFont).stringWidth(btnText);
int componentWidth = resizeBtn1.getWidth();
// Find out how much the font can grow in width.
double widthRatio = (double) componentWidth/(double) stringWidth;
int newFontSize = (int) (btnFont.getSize() * widthRatio);
int componentHeight = resizeBtn1.getHeight();
// Pick a new font size so it will not be larger than the height of label.
int fontSizeToUse = Math.min(newFontSize, componentHeight);
// Set the label's font size to the newly determined size.
resizeBtn1.setFont(new Font(btnFont.getName(), Font.BOLD, fontSizeToUse));
}
});
}
private void initComponents() {
resizeBtn1 = new javax.swing.JButton();
resizeBtn2 = new javax.swing.JButton();
resizeBtn3 = new javax.swing.JButton();
resizeBtn4 = new javax.swing.JButton();
resizeBtn5 = new javax.swing.JButton();
setLayout(new java.awt.GridLayout(5, 0));
resizeBtn1.setText("Text to resize 1");
add(resizeBtn1);
resizeBtn2.setText("Text to resize 2");
add(resizeBtn2);
resizeBtn3.setText("Text to resize 3");
add(resizeBtn3);
resizeBtn4.setText("Text to resize 4");
add(resizeBtn4);
resizeBtn5.setText("Text to resize 5");
add(resizeBtn5);
}
}
Twoim problemem jest to, że nie wysłałeś SSCCE, whats btnOperatorLogout, gdzie w głównej klasie, przepraszam, leniwość też mnie pokonała, przy okazji ten prosty problem został rozwiązany wiele razy na tym forum, mogę zobaczyć kilka kodu dla DeriveFont & JLabel – mKorbel
dziękuję, właśnie naprawiłem przykładowy kod – jadrijan
czy potrafisz obliczyć wewnętrzny obszar (patrz linia o JButton, jeśli jest zaznaczony), co oznacza, że otrzymujesz Insets z JButton i minus 1pixel dla Borders (patrz linia o JButton, jeśli jest wybrana), a następnie wynik jest dostępny wymiar dla SwingUtilities # computeStringWidht :-) – mKorbel