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

これを行うには2つの方法があります。最初のものは、上記のCyrilleKarmannによってすでに述べられています。JFrame2つ目は、あなたへの参照をあなたに渡すことです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

tagListener を内部静的クラスとして作成しました。したがって、それは別のクラスのようなものthisであり、displayImage クラスの参照を共有しません。

内部クラスの定義を次のように変更します

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
public void mouseClicked(MouseEvent e) 
{
    JLabel text = (JLabel) e.getSource();
    Window window = SwingUtilities.windowForComponent(text);
    window.setVisible( false );
    ...
}
于 2013-03-07T17:04:29.050 に答える