我想创建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内容
答案 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
会是更好的选择,因为它们已经内置了翻转支持,以及所有用户交互功能