Java使用自定义方法创建JLabel

时间:2017-11-03 20:29:35

标签: java swing methods jlabel

我想创建26个类似的JLabel,唯一的区别是位置和文本,所以我想用一个方法来做。 如何使用字符串中的名称创建JLabel? 我想用字符串中的名称创建一个JLabel,因为如果我对所有JLabel使用相同的名称,它将覆盖我创建的前一个JLabel。 这就是我所拥有的:

public void CreateButton(int x, int y, String text) {
    JLabel btnA = new JLabel("A");
    btnA.setIcon(new ImageIcon(getClass().getResource("/Btn.png")));
    btnA.setSize(40, 40);
    btnA.setLocation(x, y);
    btnA.setHorizontalTextPosition(JLabel.CENTER);
    btnA.setVerticalTextPosition(JLabel.CENTER);
    try {
        InputStream stream = ClassLoader.getSystemClassLoader().getResourceAsStream("MorePerfectDOSVGA.ttf");
        Font font = Font.createFont(Font.TRUETYPE_FONT, stream).deriveFont(48f);
    } catch (IOException |FontFormatException e) {
        e.printStackTrace();
    }
    btnA.setFont(new Font("More Perfect DOS VGA", Font.PLAIN, 40));
    btnA.setForeground(Color.WHITE);
    btnA.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseEntered(java.awt.event.MouseEvent e) {
            btnA.setIcon(new ImageIcon(getClass().getResource("/BtnHover.png")));
            btnA.setForeground(Color.YELLOW);
        }

        public void mouseExited(java.awt.event.MouseEvent e) {
            btnA.setIcon(new ImageIcon(getClass().getResource("/Btn.png")));
            btnA.setForeground(Color.WHITE);
        }

        public void mouseClicked(java.awt.event.MouseEvent e) {
            //Button Action
        }
    });

我想使用String" text"从CreateButton方法替换btnA和
JLabel内容

1 个答案:

答案 0 :(得分:0)

基本上你的要求是无法做到的,或者至少是你想象的方式。您可以使用数组来存储新创建的标签,或将它们存储在Map中,但实际上,您需要一个可以将它们吐出的工厂方法

public JLabel createButton(int x, int y, String text) {
    JLabel btnA = new JLabel("A");
    //...
    return btnA;
}

然后你可以将它们存储在数组......

public class ... {
    //...
    private JLabel[] labels = new JLabel[26];
    //...

    protected void someMethodThatYouCall() {
        // Probably some kind of loop
        labels[indexOfNextLabel] = createButton(x, y, text);
    }
}

或者您可以使用某种Map

public class ... {
    //...
    private Map<JLabel> labels = new HashMap<JLabel>();
    //...

    protected void someMethodThatYouCall() {
        // Probably some kind of loop
        labels.put(text, createButton(x, y, text));
    }
}

恕我直言,JLabel对于你似乎想要做的事情来说是一个糟糕的选择。某种JButton会是更好的选择,因为它们已经内置了翻转支持,以及所有用户交互功能