试图使一个框架从一个actionlistener中消失

时间:2013-03-07 14:29:06

标签: java swing

我在使用它的同一个类中有一个私有动作侦听器类,我试图让当前类消失,并在点击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
}

3 个答案:

答案 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 );
    ...
}