我在使用它的同一个类中有一个私有动作侦听器类,我试图让当前类消失,并在点击JLabel
时使一个新类可见。 JLabel
在运行时动态添加。我不知道如何在不使用this.setVisible()
的情况下引用我的课程。我使用netbeans IDE时出现"cannot find symbol"
错误。这是我的代码:
public class displayImage extends javax.swing.JFrame {
private static class tagListener extends MouseAdapter {
public tagListener() {
}
public void mouseClicked(MouseEvent e) {
JLabel text = (JLabel) e.getSource();
displayImage display = new displayImage(text.getText());
this.setVisible(false);
display.setVisible(true);
}
}
//Creates new form displayImage
public static String tagWord;
public displayImage(String tag) {
initComponents();
tagWord = tag;
JLabel labelTag = new JLabel();
labelTag.setText(tagWord);
labelTag.addMouseListener(new tagListener());
}
//...other methods
}
答案 0 :(得分:1)
您已将tagListener作为内部静态类。因此它就像另一个类,它不共享displayImage类的this
引用。
将内部类定义更改为
private class tagListener extends MouseAdapter
并修改您对setVisible的调用,以使用 tagListener.this
displayImage.this
来指定您要审核的this
:
displayImage.this.setVisible(false);
一些评论:您应该将Java约定用于类名:tagListener和displayImage应该是TagListener和DisplayImage。此外,扩展JFrame是一种糟糕的风格。支持组合而不是继承。
答案 1 :(得分:1)
有两种方法可以做到这一点。上面Cyrille Karmann已经说明了第一个问题。第二种方法是将JFrame
的引用传递给您的MouseAdapter
:
private static class tagListener extends MouseAdapter
{
private final JFrame frame;
public tagListener(JFrame frame)
{ this.frame = frame; }
public void mouseClicked(MouseEvent e)
{
JLabel text =(JLabel)e.getSource();
displayImage display = new displayImage(text.getText());
frame.setVisible(false);
display.setVisible(true);
}
}
public displayImage(String tag)
{
/* snip */
labelTag.addMouseListener(new tagListener(this));
}
答案 2 :(得分:1)
public void mouseClicked(MouseEvent e)
{
JLabel text = (JLabel) e.getSource();
Window window = SwingUtilities.windowForComponent(text);
window.setVisible( false );
...
}