在JavaSwing中扩展JLabel以使用给定的字体(在扩展类中的超级用法)



我正在尝试创建一个继承JLabel的新类JXLabel。不同的是,这个扩展类将为标签分配一个默认字体。

如果我尝试这个:

public class JXLabel extends JLabel {
Font f = new Font("Segoe UI", Font.PLAIN, 6);
public JXLabel() {    
super();
this.setFont(f);
}  
public JXLabel(Icon icon) {
super(icon);
this.setFont(f);
}  
public JXLabel(Icon icon, int horizontalAlignment) {
super(icon, horizontalAlignment);
this.setFont(f);
}  
public JXLabel(String text) {
super(text);
this.setFont(f);
}  
public JXLabel(String text, Icon icon, int horizontalAlignment) {
super(text, icon, horizontalAlignment);
this.setFont(f);
}  
public JXLabel(String text, int horizontalAlignment) {
super(text, horizontalAlignment);
this.setFont(f);
}  
}

我希望创建为JXLabel的新标签具有此默认字体,但它们没有。

如果我创建一个常规的JLabel并执行:

myLabel.setFont(new Font("Segoe UI", Font.PLAIN, 6));

它有效。关于扩展类中出现了什么问题,有什么建议吗?谢谢

这是上面代码的MCVE,测试断言,一种方式可以工作,而另一种方式不可以。这里,它通过设置标准JLabel的字体或使用JXLabel来工作。

看看你能不能:

  1. 在您的机器上确认结果
  2. 如果它按预期工作,请追踪原始代码中的差异

import java.awt.*;
import javax.swing.*;
public class JXLabelTest {
public static void main(String[] args) {
Runnable r = () -> {
String s = "The quick brown fox jumps over the lazy dog";
JLabel myLabel = new JLabel(s);
myLabel.setFont(new Font("Segoe UI", Font.PLAIN, 6));
JOptionPane.showMessageDialog(null, myLabel);
JOptionPane.showMessageDialog(null, new JXLabel(s));
};
SwingUtilities.invokeLater(r);
}
}
class JXLabel extends JLabel {
Font f = new Font("Segoe UI", Font.PLAIN, 6);
public JXLabel() {    
super();
this.setFont(f);
}  
public JXLabel(Icon icon) {
super(icon);
this.setFont(f);
}  
public JXLabel(Icon icon, int horizontalAlignment) {
super(icon, horizontalAlignment);
this.setFont(f);
}  
public JXLabel(String text) {
super(text);
this.setFont(f);
}  
public JXLabel(String text, Icon icon, int horizontalAlignment) {
super(text, icon, horizontalAlignment);
this.setFont(f);
}  
public JXLabel(String text, int horizontalAlignment) {
super(text, horizontalAlignment);
this.setFont(f);
}  
}

最新更新