[Swing]将相同的标签添加到面板中的不同位置,而不进行复制

时间:2016-08-07 18:13:44

标签: java swing jlabel jtextfield

我有一个应用程序计算一周内所有七天的时钟 - 小时数。我的计划是让用户介绍每天的进入和离开小时/分钟,从而收集这些数据进行计算。

UI部分应该是:

Monday:     mondayEntryHour   :   mondayEntryMinutes       mondayLeaveHour   :   mondayLeaveMinutes        
Tuesday:   tuesdayEntryHour   :   tuesdayEntryMinutes     tuesdayLeaveHour   :   tuesdayLeaveMinutes
....

我收集数据的所有位置JTextFields以及它们之间的:都是JLabel。所有14个标签都有相同的内容,相同的字体和样式,但我不能创建一个相同的变量,并在所有需要的地方添加14次,因为它只是最后一次添加。

为了证明我说的话,我在这里有一个SCCEE:

import java.awt.Cursor;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import net.miginfocom.swing.MigLayout;

public class RepeatedJLabel extends JFrame {
    public RepeatedJLabel() {
        run();

    }

    public void run() {
        JPanel p = new JPanel();
        p.setLayout(new MigLayout("debug, fill", "[grow]", "[]10[]10[]"));

        JLabel label = new JLabel("MY LABEL 1");
        p.add(label, "cell 0 1, grow");
        p.add(label, "cell 0 2, grow");
        p.add(label, "cell 0 3, grow");
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        getContentPane().setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        getContentPane().add(p);

        setVisible(true);
        setLocationRelativeTo(null);
        setResizable(true);
        pack();
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                RepeatedJLabel test = new RepeatedJLabel();

            }
        });
    }
}

我必须为它们创建14个变量吗?这是愚蠢的。我不想与这个变量的复制/浅拷贝/深拷贝混合,因为它太简单了。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

  1. 使用factory method创建每个JLabel

    private static JLabel newLabel() {
        return new JLabel("MY LABEL 1");
    }
    
  2. 每次使用for循环添加JLabel

    final int amountOfLabels = 3;
    for(int i = 0; i < amountOfLabels; i++) {
        panel.add(newLabel(), "cell 0 " + i + ", grow");
    }