Java 如何更改所有专用JLabel的字体大小

Java 如何更改所有专用JLabel的字体大小,java,swing,fonts,jlabel,Java,Swing,Fonts,Jlabel,我见过类似的问题,例如,但在我的例子中,我有25个以上的私有jlabel,我在声明它时为它们提供了一个值。我在构造函数中使用GridBagLayout将这些JLabel添加到JPanel。如果我按照链接中给出的答案使用某些东西,它只会更改在构造函数中添加的jlabel 因此,在我看来,如果我想更改私有jlabel的字体大小,我必须为它们单独定义字体大小,或者更改构造函数中的默认值,然后添加jlabel。然而,我确信一定有另一种更简单的方法,但我只是没有经验或理解来解决它,或者从其他类似问题的答案

我见过类似的问题,例如,但在我的例子中,我有25个以上的私有jlabel,我在声明它时为它们提供了一个值。我在构造函数中使用GridBagLayout将这些JLabel添加到JPanel。如果我按照链接中给出的答案使用某些东西,它只会更改在构造函数中添加的jlabel

因此,在我看来,如果我想更改私有jlabel的字体大小,我必须为它们单独定义字体大小,或者更改构造函数中的默认值,然后添加jlabel。然而,我确信一定有另一种更简单的方法,但我只是没有经验或理解来解决它,或者从其他类似问题的答案中做出适当的调整

我不认为这真的需要我显示我的代码,但如果它有帮助,我可以这样做

public class LaborRecordPanel implements
Printable, ActionListener {

private Color shade = new Color(201,201,201);

private ImageIcon logoIcon = new ImageIcon("Images/fici_logo1.jpg");
private JLabel logoLabel = new JLabel(logoIcon);

private JLabel authorizedBy = new JLabel("AUTHORIZED BY:");
private JLabel toCertify = new JLabel("THIS IS TO CERTIFY THAT THE ABOVE LABOR HAS BEEN PERFORMED.");

private JLabel laborRecordNO = new JLabel("NO.");
private JLabel nameOfJob = new JLabel("NAME OF JOB:");
private JLabel customerPO = new JLabel("CUSTOMER PO #:");
private JLabel contractNO = new JLabel("CONTRACT NO.");
private JLabel weekEnding = new JLabel("WEEK ENDING");
private JComboBox laborRateDescription = new JComboBox();
//...

JPanel rp = new JPanel();
JScrollPane scrollPane = new JScrollPane(rp);
LaborRecordPanel(){
    //Font oldLabelFont = UIManager.getFont("Label.font");
    //UIManager.put("Label.font",oldLabelFont.deriveFont(Font.PLAIN));
    //UIManager.put("Label.font", UIManager.getFont("Label.font").deriveFont(40));
    //SwingUtilities.updateComponentTreeUI(rp);
    rp.setPreferredSize(new Dimension(1295,1830 ));
    scrollPane.getVerticalScrollBar().setUnitIncrement(16); //increase the scroll speed

    GridBagLayout gridbag = new GridBagLayout();
    rp.setBackground(Color.WHITE);
    rp.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
    GridBagConstraints gbc = new GridBagConstraints();
    rp.setLayout(gridbag);
    //gbc.insets = new Insets(5, 5, 5, 5);

    //row 0////////////////////////////////////////////////////////////
    gbc.fill = GridBagConstraints.BOTH;
    gbc.gridx = 10;
    gbc.gridy = 0;
    gbc.weightx = 1;
    gbc.weighty = 1;
    gbc.gridheight = 1;
    gbc.gridwidth = 1;
    laborRecordNO.setHorizontalAlignment(JLabel.CENTER);
    laborRecordNO.setFont(new Font("Dialog", Font.PLAIN, 18));
    gridbag.setConstraints(laborRecordNO, gbc);
    rp.add(laborRecordNO, gbc);

    //row 1////////////////////////////////////////////////////////////
    gbc.gridx = 0;
    gbc.gridy = 1;
    gbc.gridwidth = 13;
    gridbag.setConstraints(logoLabel, gbc);
    rp.add(logoLabel, gbc);

    //row 2////////////////////////////////////////////////////////////
    gbc.gridx = 0;
    gbc.gridy = 2;
    gbc.gridheight = 1;
    gbc.gridwidth = 1;
    gridbag.setConstraints(nameOfJob, gbc);
    rp.add(nameOfJob, gbc);

    gbc.gridx = 6;
    gbc.gridy = 2;
    gbc.gridheight = 1;
    gbc.gridwidth = 3;
    gridbag.setConstraints(contractNO, gbc);
    rp.add(contractNO, gbc);
 //... more setting constraints and adding
 }
 }

如果您想在GUI创建期间将某些JLabel的大小更改为变量select size,那么可以使用某种工厂方法

private JLabel createLabel(String text, float points) {
  JLabel label = new JLabel(text);
  label.setFont(label.getFont().deriveFont(points));
  return label;
}

如果您想在程序运行时动态更改它们,请将它们放入
列表中,并为GUI类提供一个公共方法,允许在for循环中更改标签字体大小。

考虑到您的代码中只有
JLable
s:

这就成功了

setUIFont(new FontUIResource(new Font("Arial", 0, 20)));

这将设置
Arial
作为字体,20作为所有元素的大小

您可以更改标签的默认设置。在现有默认设置上使用
deriveFont()
可能更美观。应该在使用
EventQueue.invokeLater()构建GUI之前进行更改


请告诉我们代码!当然,请等一分钟,谢谢你的回答。所以如果我使用你的第一个建议,我会对每个标签都这样做?例如:“label”=nameOfJob,“text”=JOB的NAME,points=18。@solleks:如果你想对每个标签都这样做,那么使用其他建议,例如Nullpointer或trashgod。谢谢你的回答@Nullpointer。但我认为我的问题是,它只会更改我在构造函数中创建的jlabel,而不会更改我之前定义的jlabel,例如工作名称和周末。谢谢您的回答@trashgood,我对EventQueues不是很熟悉,所以在我可以进一步询问有关您的问题之前,我必须对其进行更多的研究suggestion@solleks:Swing GUI对象应仅在上构造和操作。
Font f = (Font) UIManager.get("Label.font");
UIManager.put("Label.font", f.deriveFont(36f));
EventQueue.invokeLater(new Runnable() {…}