即使它在上面的类中也找不到变量

时间:2018-05-07 14:05:52

标签: java variables if-statement actionlistener

所以我有一个包含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();
    }
}

3 个答案:

答案 0 :(得分:1)

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

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

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

如果要在其他方法中使用search,则应将GUI声明为con的实例变量,就像private一样。我的建议是,你做到setActionCommand(String cmd)

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

答案 1 :(得分:1)

search变量不是实例变量,其范围仅限于构造函数,因此您不能在它之外使用它。

JButton search之后声明Connection con = null;变量。

另请注意,有空的'否则' actionPerformed方法中的陈述。

答案 2 :(得分:0)

类GUI扩展JFrame实现了ActionListener {

Connection con = null;
JButton search;

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);
    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);
}

}