刷新JLabel-Java
我对JLabel和帧有一些问题 我有以下代码:刷新JLabel-Java,java,user-interface,jlabel,Java,User Interface,Jlabel,我对JLabel和帧有一些问题 我有以下代码: list.addListSelectionListener( new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { //System.out.println(e.getFirstIndex());
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中心的标签。但使用此代码,旧图像将进一步显示,而新图像仅绘制在现有图像的后面
有人能帮我吗?:) 您似乎使用的不是同一个JLabel。您应该更改已有的标签,而不是创建一个新标签。您似乎没有使用相同的JLabel。您应该更改已有的标签,而不是创建新的标签。首先,您要创建一个新的JLabel实例,而不是使用现有的实例。你真正想做的是:
labe.setIcon(icon);
这将自动刷新元素。首先,您要创建一个新的JLabel实例,而不是处理现有实例。你真正想做的是:
labe.setIcon(icon);
这将自动刷新元素。建议:
setIcon(…)
方法更改该JLabel中显示的图标revalidate()
或repaint()
,因为如果您更改容器中保存的组件,例如从JFrame的contentPane中删除原始JLabel并替换为新组件,则应执行此操作。请注意,我不建议您这样做,因为这会使本来应该是一件简单的事情——交换图标——变得过于复杂李>
ArrayList
或HashMap
),然后在侦听器代码中提取正确的图标,并将其放入现有的JLabel中setIcon(…)
方法更改该JLabel中显示的图标revalidate()
或repaint()
,因为如果您更改容器中保存的组件,例如从JFrame的contentPane中删除原始JLabel并替换为新组件,则应执行此操作。请注意,我不建议您这样做,因为这会使本来应该是一件简单的事情——交换图标——变得过于复杂李>
ArrayList
或HashMap
),然后在侦听器代码中提取正确的图标,并将其放入现有的JLabel中只需更改标签的图标,不要在选择时创建新标签您的问题是一个神奇的想法。创建一个新的JLabel并给它一个ImageIcon不会神奇地改变GUI,也不会改变它当前可能持有的JLabel对象中可能显示的内容。具有指向代码的链接,这些代码几乎与您正试图执行的操作完全相同--当选择组合框中的某个项目时,更改JLabel显示的图像。我建议您学习本教程和代码,因为在JList的上下文中很容易使用本代码和教程中的概念。只需更改标签的图标,不要在选择时创建新标签您的问题是一个神奇的想法。创建一个新的JLabel并给它一个ImageIcon不会神奇地改变GUI,也不会改变它当前可能持有的JLabel对象中可能显示的内容。具有指向代码的链接,这些代码几乎与您正试图执行的操作完全相同--当选择组合框中的某个项目时,更改JLabel显示的图像。我建议您学习本教程和代码,因为在JList的上下文中使用本代码和教程中的概念很容易。谢谢您的快速回答。你能告诉我,它应该是如何工作的吗@dankoe:您没有发布有效的标签,因此没有人可以告诉您在当前代码中如何执行。这完全取决于代码的其他部分,比如标签变量位于何处?谢谢您的快速回答。你能告诉我,它应该是如何工作的吗@dankoe:您没有发布有效的标签,因此没有人可以告诉您在当前代码中如何执行。这完全取决于代码的其余部分,比如标签变量位于何处?