0

我有一个要插入 JPanel 的 JLabels 列表:

avatarGridPanel.add(new JLabel(new ImageIcon("images/gui/orc_male.png", "Orc Male")));
avatarGridPanel.add(new JLabel(new ImageIcon("images/gui/human_male.png", "Human Male")));
avatarGridPanel.add(new JLabel(new ImageIcon("images/gui/tundrian_male.png", "Tundrian Male")));
avatarGridPanel.add(new JLabel(new ImageIcon("images/gui/brimlock_male.png", "Brimlock Male")));

我想为每个人添加工具提示文本。有没有比使用临时变量保存其中一个值然后继续重复使用它更好的方法?

JLabel temp = new JLabel();
temp = new JLabel(new ImageIcon("images/gui/human_male.png", "Human Male"));
temp.setToolTipText("Human Male");
avatarGridPanel.add(temp);

我尝试做这样的事情(如下),但无法让它工作。谢谢你的帮助!

avatarGridPanel.add(new JLabel(new ImageIcon("images/gui/human_male.png", "Human Male")).setToolTipText("Human Male"));
4

4 回答 4

2

您可以创建一个方法,在其中传递图像位置、文本和工具提示文本,以避免所有代码重复。

这应该工作

private static JLabel createImageLabel(String imageLocation, String name, String toolTipText) {
    JLabel temp  = new JLabel(new ImageIcon(imageLocation, name));
    temp.setToolTipText(toolTipText);
    return temp;
}
于 2011-11-23T18:52:40.630 回答
2

您可以创建一个函数来为您创建这些。当我有一个大数组并且需要一遍又一遍地做同样的事情时,我有时会这样做:

private static JLabel makeLabel(String path, String name) {
    JLabel label = new JLabel(new ImageIcon(path, name));
    label.setToolTipText(name);
    return label;
}

然后在该班级的其他地方:

avatarGridPanel.add(makeLabel("images/gui/orc_male.png", "Orc Male"));
于 2011-11-23T18:54:00.127 回答
2

您可以使用“临时”变量,但如果这样做,您不想先创建一个空的 JLabel,然后再创建一个带有图标和文本的新 JLabel。

但是创建一个辅助方法怎么样?

...
avatarGridPanel.add(createLabel("images/gui/human_male.png", "Human Male"));
...

private JLabel createLabel(String iconPath, String description) {
    JLabel label = new JLabel(new ImageIcon(iconPath, description));
    label.setToolTipText(description);
    return label;
} 
于 2011-11-23T18:56:16.787 回答
0

有很多方法可以在一行中做到这一点,但没有什么真正干净也不优雅。

无论如何,在大多数情况下,创建一个类的新实例而不将它们存储在至少一个局部变量中(即使是临时使用)并不是一个好主意。

所以,最好的办法是拥有这个temp变量或将代码委托给其他东西(方法/构建器)。

于 2011-11-23T18:51:51.657 回答