我有一个扩展JPanel的类,上面有几个按钮。我希望能够通过调用setFont(Font字体)在所有按钮上设置字体;我在JPanel类中定义了setFont方法:
public class MyPanel extends JPanel {
private JButton[] buttons = new JButton[10];
public MyPanel() {
for(int i = 0; i < 10; i++) {
buttons[i] = new JButton(""+i);
this.add(buttons[i]);
}
}
public void setFont(Font font) {
if(buttons != null) {
for(JButton b : buttons) {
b.setFont(font);
}
}
}
}
但是,按钮上的字体永远不会改变。我知道setFont是由JPanel构造函数调用的,但我不明白为什么,当我在创建MyPanel对象后清楚地调用它时,字体不会传递给按钮。
谢谢大家!
布伦特
答案 0 :(得分:3)
如果您希望应用程序中的所有后续按钮使用不同的字体,您可以在实例化面板之前设置默认值:
UIManager.put("Button.font", new FontUIResource("Dialog", Font.BOLD, 24));
附录:更集中的方法可能是在面板的构造函数中添加扩展JButton
的实例:
buttons[i] = new MyButton(String.valueOf(i));
this.add(buttons[i]);
新按钮的字体始终相同:
private static class MyButton extends JButton {
private static final Font font = new Font("Dialog", Font.BOLD, 24);
public MyButton(String text) {
super(text);
this.setFont(font);
}
}
答案 1 :(得分:2)
不知道你是否会更容易找到它,但你也可以使用:
button.setFont(null);
为每个按钮。然后,当您想要更改字体时,您可以执行以下操作:
panel.setFont(...);
按钮将从面板继承字体。我猜你需要在面板上调用repaint()方法。
答案 2 :(得分:1)
我相信在每个按钮上尝试“重绘”方法应该有效。
答案 3 :(得分:1)
如果是重新绘制问题,请最小化并重新打开gui以查看重绘是否解决了问题。如果没有,你会发现有些东西在你之后设置了按钮上的字体。 Proabaly诊断这个的最好方法是创建JButton的子类(暂时)并使用它来调试对setFont()的调用 - 你将能够检查堆栈跟踪以查看正在调用的内容。
所以,
private JButton[] buttons = new JButton[10];
buttons[i] = new JButton(""+i);
更改为buttons[i] = new MyJButton(""+i);
希望有所帮助