【问题标题】:Java: passing a label identifier as a stringJava:将标签标识符作为字符串传递
【发布时间】:2014-04-13 10:34:18
【问题描述】:

我有 4 或 5 个 if 语句控制一个 标签 和一个 面板,我有 16 个标签和面板

目前我想通过将标签和面板标识符传递给另一种方法来缩短它,并尝试像这样以String 这样做

String panel="fourFour";
String label="lFourFour";
imaging(panel, label, damage, 4, 4);

public void imaging(String panel, String label, int[]damage, int x, int y){

    if (Game.here(x,y)==1) {
        Color myColor = Color.decode("#8C0834");
        panel.setBackground(myColor);
        label.setIcon(new ImageIcon("Space.jpg"));
    }

但是我似乎无法做到这一点。

有没有办法将标签和面板标识符传递给另一个方法?

【问题讨论】:

  • imaging函数中,panel是一个String,但是你在它上面调用setBackground(),这不是String方法。如果您真的想使用字符串来标识您的面板,则需要Map<String, JPanel> 来跟踪字符串名称和实际面板对象之间的链接。但更大的问题是,为什么要传递这些字符串,而不是面板引用?
  • 我正在尝试创建一个可以调用的方法来处理所有 16 个面板和带有 4 或 5 个 if 语句的标签。现在我的页面上有 16*5 If 语句,看起来很乱。如果我可以将标签和面板标识符传递给这个方法,我可以只有 5 个 If 语句,但我需要一种传递标签和面板的方法,否则我会留下 16*5 if 语句而不是 1。这有意义吗?

标签: java label panel


【解决方案1】:

你可以为这样一个经常使用的特性创建一个专门的类,例如:

public class DamagePanel extends JPanel {
    private JLabel label;

    public DamagePanel(final String ident) {
        label = new JLabel(ident);
        this.add(label);
    }

    public String getIdent() {
        return label.getText();
    }

    public void reportDamage(int[]damage, int x, int y) {
        ...
    }
}

【讨论】:

  • 如果您不想结合 ident 和标签文本,当然也可以使用单独的字段作为“ident”...
  • 谢谢,我想这就是我需要的。
猜你喜欢
  • 1970-01-01
  • 2023-01-23
  • 2011-05-02
  • 1970-01-01
  • 2021-09-26
  • 2011-11-18
  • 2017-06-21
  • 2014-09-07
  • 1970-01-01
相关资源
最近更新 更多