0

私は私が持っているこの問題の迅速な修正を探しています:これが私のコードです:

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:

4

2 に答える 2

2

ここにはいくつかのオプションがあります。

  • 最も速いのは、Eclipseが指示することを実行することです。実際、それを指示するのはJavaです。メソッド内の内部クラス内でメソッドローカル変数を使用できるようにするには、変数がfinalである必要があります。
  • もう1つのオプションは、クラス定義の直後に、housetype変数をインスタンス変数として宣言することです。ただし、静的mainメソッドで使用するということは、変数も静的である必要があることを意味します。これにより、クラス変数になります。
  • もう1つは、コードをそのままにして、以下のような追加の変数を宣言してから、housetypeの代わりに内部クラス内でhouse変数を使用することです。以下のコード全体を参照してください。

    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);
      }
    }
    
  • さらに多くのオプションがありますが、これらが最も高速です。

于 2012-08-22T08:34:51.993 に答える
1

回避策の1つは、ActionListenerから呼び出され、タスクを実行する新しいメソッドをクラスディレクトリ内に作成することです。

private void searchButtonAction() {
    String searchquery = searchfield.getText();
    searchprogress.setValue(100);
    searchfield.setEnabled(false);
    if(searchquery.equals(housetype)){
        System.out.println("We Have Found  A Record!!");
    }
}

そしてそれをこのように呼びます:

public void actionPerformed(ActionEvent ae)
{
    searchButtonAction();
});

これは、クラスにコンストラクターを作成し、それをmainメソッドから呼び出す場合にのみ機能します。さらに、searchButtonActionメソッド内で使用されるすべての変数は、クラスで表示される必要があります。

完全なコード:

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
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 {

    private final JTextField searchfield = new JTextField();
    private final JProgressBar searchprogress = new JProgressBar();

    private String housetype;

    public Directory() throws IOException {

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

        JPanel panel = new JPanel();
        final JButton searchbutton = new JButton("Search");
        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"));
        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) {
                searchButtonAction();
            }
        });

        /* 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);

    }

    private void searchButtonAction() {
        String searchquery = searchfield.getText();
        searchprogress.setValue(100);
        searchfield.setEnabled(false);
        if (searchquery.equals(housetype)) {
            System.out.println("We Have Found  A Record!!");
        }
    }

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

        new Directory();

    }
    }
于 2012-08-22T08:37:54.010 に答える