我在使用JLabel和Frames时遇到了一些问题..
我有以下代码:
list.addListSelectionListener(
new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
//System.out.println(e.getFirstIndex());
String selectedFile = list.getSelectedValue().toString();
System.out.println("Selected file " + selectedFile);
JLabel label;
ImageIcon icon = new ImageIcon("C:\\Users\\danie\\Pictures\\" + selectedFile);
// frame.setSize(1047, 680);
label = new JLabel(icon);
//label.setSize(100,100);
frame.getContentPane().add(label, BorderLayout.CENTER);
frame.revalidate();
frame.repaint();
}
});
如果选择了JList中的项目,我想刷新borderlayout中心的标签。但是使用此代码,旧图像将进一步显示,新图像仅在现有图像后面绘制。
有人能帮帮我吗? :)
答案 0 :(得分:2)
首先,您要创建一个新的JLabel实例,而不是处理现有实例。你真正想做的是:
labe.setIcon(icon);
这将自动刷新元素。
答案 1 :(得分:2)
建议:
setIcon(...)
方法revalidate()
或repaint()
,因为如果更改容器中保留的组件,则应执行此操作,例如,如果您从JFrame的contentPane中删除了原始JLabel并换入了新的一。请注意,我不建议您执行此操作,因为它过分复杂应该是一件简单的事情 - 交换图标。 ArrayList<Icon>
或{{1} }),然后在您的侦听器代码中,提取正确的图标,并将其放入现有的 JLabel。答案 2 :(得分:1)
您似乎没有使用相同的JLabel。您应该更改已有的标签,而不是创建新的标签。