2

我在使用它的同一类中有一个私有动作侦听器类,我试图使当前类消失并在JLabel单击时使一个新类可见。JLabel是在运行时动态添加的。我不知道如何在不使用this.setVisible(). "cannot find symbol"使用 netbeans IDE 时出现错误。这是我的代码:

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
}
4

3 回答 3

1

您已将 tagListener 作为内部静态类。因此它就像另一个类,它不共享thisdisplayImage 类的引用。

将内部类定义更改为

private class tagListener extends MouseAdapter

并修改您对 setVisible 的调用以使用,以指定您要引用的内容:tagListener.this displayImage.thisthis

displayImage.this.setVisible(false);

一些注意事项:您应该真正使用 Java 类名约定:tagListener 和 displayImage 应该是 TagListener 和 DisplayImage。此外,扩展 JFrame 也是一种不好的风格。支持组合而不是继承。

于 2013-03-07T14:33:09.730 回答
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));
 }
于 2013-03-07T14:36:46.123 回答
1
public void mouseClicked(MouseEvent e) 
{
    JLabel text = (JLabel) e.getSource();
    Window window = SwingUtilities.windowForComponent(text);
    window.setVisible( false );
    ...
}
于 2013-03-07T17:04:29.050 回答