我正在寻找解决此问题的快速方法:这是我的代码:

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JTextField;

public class Directory{
    public static void main(String args[]) throws IOException{

    JFrame frame = new JFrame("Directory");
    frame.setPreferredSize(new Dimension(300,300));
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    final JProgressBar searchprogress = new JProgressBar();
    JPanel panel = new JPanel();
    final JButton searchbutton = new JButton("Search");
    final JTextField searchfield = new JTextField();
    searchfield.setPreferredSize(new Dimension(100,30));
    searchprogress.setPreferredSize(new Dimension(200, 30));
    searchbutton.setLocation(100, 100);


    /*                  Start Buffered Reader                       */
    BufferedReader br = new BufferedReader(new FileReader("test1.txt"));
    String housetype = br.readLine();
    String housenumber = br.readLine();
    String housestreet = br.readLine();
    String housepostal = br.readLine();
    String houseplace = br.readLine();
    String seperation = br.readLine();
    /*                  Finish Buffered Reader                      */



    /*                      Start Content Code                      */
    JButton done = new JButton("Done");
    done.setVisible(false);
    JLabel housetype_label = new JLabel();
    JLabel housenumber_label = new JLabel();
    JLabel housestreet_label = new JLabel();
    JLabel housepostal_label = new JLabel();
    JLabel houseplace_label = new JLabel();


    /*                      Finish Content Code                     */

    /*                      Start Button Code                       */

    searchbutton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae)
        {
            String searchquery = searchfield.getText();
            searchprogress.setValue(100);
            searchfield.setEnabled(false);
            if(searchquery.equals(housetype)){
                System.out.println("We Have Found  A Record!!");
            }}
        });


    /*                      Finish Button Code                      */
    /*                          Test Field                          */


    /*                      End Test Field                          */

    panel.add(searchfield);
    panel.add(done);
    panel.add(searchbutton);
    panel.add(searchprogress);
    frame.add(panel);
    frame.pack();
    frame.setVisible(true);


}
}


基本上,在我编写了这段代码之后,Eclipse告诉我必须将housetype的修饰符更改为final。这真的不会做,因为如果要通过不同的记录,我需要成为一个不断变化的值。
请帮我! D:

最佳答案

您在这里有几种选择:


最快的方法是执行Eclipse告诉您的内容,实际上是Java告诉您这一点。为了能够在方法内部类内部使用方法局部变量,这些变量必须是最终变量。
另一种选择是在类定义之后立即将housetype变量声明为实例变量。但是,在静态main方法中使用它意味着变量也必须是静态的,这使其成为类变量。
另一种方法是保持代码不变,但声明一个额外的变量,如下所示,然后在内部类中使用house变量而不是housetype。请参阅下面的完整代码:

public class Directory {
  public static void main(String args[]) throws IOException {

    JFrame frame = new JFrame("Directory");
    frame.setPreferredSize(new Dimension(300, 300));
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    final JProgressBar searchprogress = new JProgressBar();
    JPanel panel = new JPanel();
    final JButton searchbutton = new JButton("Search");
    final JTextField searchfield = new JTextField();
    searchfield.setPreferredSize(new Dimension(100, 30));
    searchprogress.setPreferredSize(new Dimension(200, 30));
    searchbutton.setLocation(100, 100);

    /* Start Buffered Reader */
    final List<String> housetypes = new ArrayList<String>();
    String line = "";
    BufferedReader br = new BufferedReader(new FileReader("test1.txt"));
    while (line != null) {
        line = br.readLine();
        housetypes.add(line);
        String housenumber = br.readLine();
        String housestreet = br.readLine();
        String housepostal = br.readLine();
        String houseplace = br.readLine();
        String seperation = br.readLine();
    }
    /* Finish Buffered Reader */

    /* Start Content Code */
    JButton done = new JButton("Done");
    done.setVisible(false);
    JLabel housetype_label = new JLabel();
    JLabel housenumber_label = new JLabel();
    JLabel housestreet_label = new JLabel();
    JLabel housepostal_label = new JLabel();
    JLabel houseplace_label = new JLabel();

    /* Finish Content Code */

    /* Start Button Code */
    searchbutton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            String searchquery = searchfield.getText();
            searchprogress.setValue(100);
            searchfield.setEnabled(false);
            for (String housetype : housetypes) {
                if (searchquery.equals(housetype)) {
                    System.out.println("We Have Found  A Record!!");
                }
            }
        }
    });

    /* Finish Button Code */
    /* Test Field */

    /* End Test Field */

    panel.add(searchfield);
    panel.add(done);
    panel.add(searchbutton);
    panel.add(searchprogress);
    frame.add(panel);
    frame.pack();
    frame.setVisible(true);
  }
}

还有更多选择,但是这些是最快的。

09-26 06:31