下面是我创建ImageIcon和JLabel的片段:
ImageIcon armorShopIcon = new ImageIcon("/images/armorshop.png", "Armor Shop");
JLabel armorShopLabel = new JLabel("Armor Shop", armorShopIcon, JLabel.CENTER);
object.setArmorImage(armorShopLabel);
然后在我的对象类中我有一个setter:
public void setArmorImage(JLabel label) {
this.jLabel1 = label;
}
当我测试我的应用程序时,这不显示图像,我想知道是否有人可以指出我的错误
修改 的
大部分源代码:
主:
public class Main extends javax.swing.JFrame {
public Main() {
initComponents();
ImageIcon armorIcon = new ImageIcon("/images/armorshop.png", "Armor Shop");
JLabel armorShopLabel = new JLabel("Armor Shop", armorShopIcon, JLabel.CENTER);
ShopDisplay armorShop = new ShopDisplay();
armorShop.setArmorImage(armorShopLabel);
public initComponents() { /*more generated code here*/ }
}
}
显示:
public class ShopDisplay extends javax.swing.JPanel {
/** Creates new form ShopDisplay */
public ShopDisplay() {
initComponents();
}
//generated by the gui builder
//initComponents
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jLabel1.setText("Shop Name");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
add(jLabel1, gridBagConstraints);
}
//Variable declarationg
private javax.swing.JLabel jLabel1;
//Setter for Shop Name
public void setArmorImage(JLabel shopLabel) {
this.jLabel1 = shopLabel;
}
//other setters for
//multiple jLabels
}
答案 0 :(得分:3)
public void setArmorImage(JLabel label)
{
this.jLabel1 = label;
}
该代码什么都不做。为另一个变量分配标签引用不会影响GUI。您需要将标签“添加(...)”添加到GUI,以便看到标签。
阅读How to Use Icons上的Swing教程,了解工作示例。
如果您想更新GUI上的现有标签,那么您将使用:
label.setIcon(...);
如果您需要更多帮助,请发布显示问题的SSCCE。
答案 1 :(得分:2)
您传递的标签未添加到GUI中,以下方法可能有所帮助 -
将另一个JPanel添加为jLabel1
的容器,并仅替换其内容:
即:
private javax.swing.JPanel containerPanel;
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jLabel1.setText("Shop Name");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
containerPanel = new javax.swing.JPanel();
containerPanel.add(jLabel1);
add(containerPanel, gridBagConstraints);
}
//Variable declarationg
private javax.swing.JLabel jLabel1;
//Setter for Shop Name
public void setArmorImage(JLabel shopLabel) {
containerPanel.remove(jLabel1);
containerPanel.add(shopLabel);
jLabel1 = shopLabel;
revalidate();
}
,如果你想将它添加到gui,你可以执行以下操作之一:
将jLabel1
的属性设置为shopLabel
的属性,例如this.jLabel1.setText(shopLabel.getText());
或者 - 删除jLabel1
,添加shopLabel
并将this.jLabel1
设置为shopLabel
:
例如:
public void setArmorImage(JLabel shopLabel) {
remove(jLabel1);
add(shopLabel);
jLabel1 = shopLabel;
revalidate();
}
击> <击> 撞击>
答案 2 :(得分:2)
您正在创建JLabel
,然后将其传递给setArmorImage
,然后将其分配给jLabel1
。问题是你的价值发生变化之后你在jLabel1
做了什么?我的猜测是你将jLabel1
放在容器中的某个地方,然后调用setArmorImage
来改变jLabel1
指向的内容,但旧标签实例(先前由{{1}指向) })仍然在你的容器中。
要解决此问题,您需要删除旧标签实例并添加新标签实例。您可以使用旧容纳您的Label的容器(jLabel1
)来简化此操作。然后你需要做的就是交换持有者的标签。
答案 3 :(得分:2)
GUI编辑器生成的唯一内容是
jLabel1
。
折叠中没有代码?由于没有其他人可以看到您的计算机,因此请从每个人都能看到的工作example开始。解压缩,然后输入ant run
。现在将src/components/LabelDemo.java
与您的代码进行比较。