有许多类似的主题,但是没有一个建议的解决方案适合我。
所以,我有一个空的JLabel
,并且在执行期间的某个时候我想在其上添加一个图标。
String imageLocation = "/home/........"
jLabel1.setIcon(new ImageIcon(imageLocation));
无效。
图片的位置很好 - >
System.out.println(new java.io.File(imageLocation).exists());
是true
答案 0 :(得分:3)
由于图标是JLabel
的绑定属性,setIcon()
就足够了,如下所示。使用示例获取图标位置,并参阅embedded-resource以了解常见问题的示例。
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.UIManager;
/**
* @see http://stackoverflow.com/a/33003415/230513
*/
public class Test {
private void display() {
Icon icon = (Icon) UIManager.getIcon("OptionPane.errorIcon");
JFrame f = new JFrame("Test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label = new JLabel("Test", JLabel.CENTER){
@Override
public Dimension getPreferredSize() {
return new Dimension(2 * icon.getIconWidth(), 2 * icon.getIconHeight());
}
};
f.add(label);
f.add(new JButton(new AbstractAction("Add icon") {
@Override
public void actionPerformed(ActionEvent e) {
label.setIcon(icon);
}
}), BorderLayout.SOUTH);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Test()::display);
}
}
答案 1 :(得分:-1)
您需要重新验证并重新标记包含此标签的面板的标签,您可以通过以下方式执行此操作:
String imageLocation = "/home/........"
jLabel1.setIcon(new ImageIcon(imageLocation));
//Add this :
jLabel1.revalidate();
jLabel1.repaint();
//if it does not work try to do the same for the panel which contain this label