将背景/不透明设置为所有JLabels



请参阅我的代码:

package hsleiden.webcat.exercise12_08;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.Border;
public class newFrame extends JFrame {
    public static void main(String[] args){
    newFrame frame = new newFrame();
    frame.setLayout(new GridLayout(2,3));
    frame.setSize(200, 200);
    frame.setTitle("Opdracht 12.8");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    }
    public newFrame(){
        JLabel label1 = new JLabel("Black", JLabel.CENTER);
        JLabel label2 = new JLabel("Blue", JLabel.CENTER);
        JLabel label3 = new JLabel("Cyan", JLabel.CENTER);
        JLabel label4 = new JLabel("Green", JLabel.CENTER);
        JLabel label5 = new JLabel("Magenta", JLabel.CENTER);
        JLabel label6 = new JLabel("Orange", JLabel.CENTER);
        Border border = BorderFactory.createLineBorder(Color.YELLOW);
        label1.setBackground(Color.WHITE);
        label2.setBackground(Color.WHITE);
        label3.setBackground(Color.WHITE);
        label4.setBackground(Color.WHITE);
        label5.setBackground(Color.WHITE);
        label6.setBackground(Color.WHITE);
        label1.setForeground(Color.BLACK);
        label2.setForeground(Color.BLUE);
        label3.setForeground(Color.CYAN);
        label4.setForeground(Color.GREEN);
        label5.setForeground(Color.MAGENTA);
        label6.setForeground(Color.ORANGE);
        label1.setBorder(border);
        label2.setBorder(border);
        label3.setBorder(border);
        label4.setBorder(border);
        label5.setBorder(border);
        label6.setBorder(border);
        label1.setOpaque(true);
        label2.setOpaque(true);
        label3.setOpaque(true);
        label4.setOpaque(true);
        label5.setOpaque(true);
        label6.setOpaque(true);

        add(label1);
        add(label2);
        add(label3);
        add(label4);
        add(label5);
        add(label6);
    }
}

正如你所看到的,应用背景、边框、不透明的每个标签非常麻烦。。这是18行1和同样的东西。我想知道是否有人能告诉我如何将所有东西(背景、不透明、边框)应用于所有标签,而不必按每个标签进行。因为它们都是一样的(除了前景)。

希望有人能为我找到解决方案。

谢谢!

您可以创建创建和添加新JLabel的方法,如下所示:

private void addNewLbl(String text, Color foreground){
    JLabel lbl = new JLabel(text, JLabel.CENTER);
    lbl.setBorder(BorderFactory.createLineBorder(Color.YELLOW));
    lbl.setBackground(Color.WHITE);
    lbl.setForeground(foreground);
    lbl.setOpaque(true);
    add(lbl);
}

并将其用于构建您的JFrame:addNewLbl("black",Color.BLACK);

  1. 您可以创建自己的类来扩展JLabel并实现Clonable。您可以覆盖clone方法,并根据需要创建任意数量的JLabel副本
  2. Spring通过BeanUtils.copyProperties提供了一种方便的方法

使用标签数组,并为引用Color数组的数组中的每个元素调用setBackground,以获得标题&相应组件的颜色。

最新更新