2011-11-23 80 views
0

我有我insterting到我的JPanel的JLabel列表:爪哇 - 如何使用方法

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"))); 

我想为toolTipText添加到每个人。有没有更好的方法比使用临时变量来保存其中一个值,然后继续使用它?

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")); 
+1

是否有任何理由不想保留对它们的引用?因此,有'JLabel myLabel1 =新的JLabel(等等);'为他们每个人,然后使用这些引用来添加工具提示? –

+0

我得到的错误是:类型Container中的方法add(Component)不适用于参数(void) – KisnardOnline

+0

dann.dev:是因为我不需要继续引用它们。我想保持我的代码整洁和组织 – KisnardOnline

回答

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")); 
+0

谢谢这是我会做的,然后非常感谢。我不确定是否有更好的捷径,但这必须做。 – KisnardOnline

0

有一种方法可以在一条线上做到这一点,但没有什么真正的干净和优雅。

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

所以,这里要做的最好的事情是让这个temp变量或委托给其他东西(方法/构建器)。

2

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

这应该工作

private static JLabel createImageLabel(String imageLocation, String name, String toolTipText) { 
    JLabel temp = new JLabel(new ImageIcon(imageLocation, name)); 
    temp.setToolTipText(toolTipText); 
    return temp; 
} 
2

您可以使用“TEMP”变量,但如果你不想先创建一个空的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; 
}