Расширение JLabel в Java Swing для использования заданного шрифта (супер использование в расширенных классах) - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь создать новый класс JXLabel, который наследует JLabel.Разница в том, что этот расширенный класс назначит шрифт по умолчанию для метки.

Если я попробую это:

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));

Это работает.Любой совет о том, что не так в расширенном классе?Спасибо.

1 Ответ

0 голосов
/ 24 ноября 2018

Вот 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);
    }  
}
...