首页 > 解决方案 > 即使在上面的类中也找不到变量

问题描述

所以我有一个包含 JButtons 的 GUI 类,然后我在下面有一个 actionPerformed 类,它显示了如果我按下按钮会发生什么。现在,当我进行if(e.getSource()==search)搜索时,搜索出现红色并说在类 GUI 中找不到变量。即使它在那个级别。

我需要一些帮助。

package crimedata;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;


class GUI extends JFrame implements ActionListener {

    Connection con = null;

    GUI() {
        JPanel p = new JPanel();
        JFrame f = new JFrame("Crime Data");

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(600, 600);

        f.setResizable(true);
        f.setLocationRelativeTo(null);
        GridBagConstraints gbc = new GridBagConstraints();
        getContentPane().setLayout(new GridBagLayout());

        gbc.insets = new Insets(5, 5, 5, 5);

        JLabel LongLabel = new JLabel("Enter Longitude here");
        LongLabel.setForeground(Color.gray);
        gbc.gridx = 0;
        gbc.gridy = 1;
        getContentPane().add(LongLabel, gbc);
        JTextField LongText = new JTextField(20);
        getContentPane().add(LongText, gbc);

        JLabel LatLabel = new JLabel("Enter Latitude here");
        LatLabel.setForeground(Color.gray);
        gbc.gridx = 0;
        gbc.gridy = 2;
        getContentPane().add(LatLabel, gbc);
        JTextField LatText = new JTextField(20);
        getContentPane().add(LatText, gbc);

        JLabel LSOANameLabel = new JLabel("Enter LSOA Name here");
        LSOANameLabel.setForeground(Color.gray);
        gbc.gridx = 0;
        gbc.gridy = 3;
        getContentPane().add(LSOANameLabel, gbc);
        JTextField LSOANameText = new JTextField(20);
        getContentPane().add(LSOANameText, gbc);

        JButton search = new JButton("Search");
        gbc.gridx = 0;
        gbc.gridy = -1;
        getContentPane().add(search, gbc);
        search.addActionListener(this);

        JButton exportnoid = new JButton("Export No Crime ID");
        gbc.gridx = 0;
        gbc.gridy = -1;
        getContentPane().add(exportnoid, gbc);

        JButton exportdup = new JButton("Export Duplicate ID");
        gbc.gridx = 0;
        gbc.gridy = -1;
        getContentPane().add(exportdup, gbc);

        f.add(getContentPane());
        pack();
        f.setVisible(true);
    }

   @Override
   public void actionPerformed(ActionEvent e) {
      if(e.getSource()==search){
          System.out.println("");
      } else {

      }
   }

}

class GUIHandler {
    public static void main(String[] args) {
        GUI a = new GUI();
    }
}

标签: javavariablesif-statementactionlistener

解决方案


search不,您的 class 范围内没有变量GUI

search您的类的构造函数中有一个局部变量GUI

到目前为止,我看到的唯一实例变量是contype的变量Connection

如果您想在另一个方法中使用它,您应该声明search为 的实例变量GUI,就像 一样。con我的建议是,你做到了private

或者,您可以使用setActionCommand(String cmd)为您的 JButton 设置操作命令名称。然后您可以使用getActionCommand()yourActionEvent来检索操作的名称并做出相应的反应。但我不喜欢这种方法,因为在这种情况下,编译器无法帮助您检测名称冲突。


推荐阅读