java - 即使在上面的类中也找不到变量
问题描述
所以我有一个包含 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();
}
}
解决方案
search
不,您的 class 范围内没有变量GUI
。
search
您的类的构造函数中有一个局部变量GUI
。
到目前为止,我看到的唯一实例变量是con
type的变量Connection
。
如果您想在另一个方法中使用它,您应该声明search
为 的实例变量GUI
,就像 一样。con
我的建议是,你做到了private
。
或者,您可以使用setActionCommand(String cmd)
为您的 JButton 设置操作命令名称。然后您可以使用getActionCommand()
yourActionEvent
来检索操作的名称并做出相应的反应。但我不喜欢这种方法,因为在这种情况下,编译器无法帮助您检测名称冲突。
推荐阅读
- mysql - 在mysql中为group by语句选择不同的参数?
- reactjs - 如何防止组件过早消失?
- kotlin - 类型不匹配 Kotlin 和 getStringArrayListExtra
- javascript - Webpack - 多个入口点,需要它们之间的捆绑包
- ios - Swift 5:在显示的时间更改时区
- c# - 需要将两个 lambda 表达式合二为一来执行一个参数的两个单独条件
- javascript - 错误与triggerWord 和 Javascript
- visual-studio - 在 Visual Studio Pro 2019 的参数中传递空格
- python - 在 Pandas 中过滤期间返回的 KeyError
- python - 当我有多个 .py 文件一起工作时,如何将 python 项目转换为可执行文件?