-1

したがって、私のデータは log.txt というファイルに保存されており、その内容を GUI で表示したいと考えています。1 つはエンジンで、log.txt ファイルを読み取ります。もう 1 つは GUI で、エンジンで使用されるメソッドを適用するために使用されます。

したがって、私のエンジンには、次のコードがあります。

public void loadLog()
    {
        try
        {
            java.io.File cpFile = new java.io.File( "log.txt" );

            if ( cpFile.exists() == true )
            {
                File file = cpFile;

                FileInputStream fis = null;
                BufferedInputStream bis = null;
                DataInputStream dis = null;

                String strLine="";
                String logPrint="";

                fis = new FileInputStream ( file );

                // Here is BufferedInputStream added for fast reading
                bis = new BufferedInputStream ( fis );
                dis = new DataInputStream ( bis );

                // New Buffer Reader
                BufferedReader br = new BufferedReader( new InputStreamReader( fis ) );

                while ( ( strLine = br.readLine() ) != null )
                {
                    StringTokenizer st = new StringTokenizer ( strLine, ";" );

                    while ( st.hasMoreTokens() )
                    {
                        logPrint       = st.nextToken();
                        System.out.println(logPrint);

                    }

                    log = new Log();
                    //regis.addLog( log );




                }
            }

        }
        catch ( Exception e ){
        }
    }

次に、GUI で、エンジンで使用されているコードを適用しようとします。

                    // create exit menu
        Logout = new JMenu("Exit");

        // create JMenuItem for about menu
        reportItem   = new JMenuItem ( "Report" );

        // add about menu to menuBar
        menuBar.add ( Logout );
        menuBar.setBorder ( new BevelBorder(BevelBorder.RAISED) );

        Logout.add ( reportItem );

    /* --------------------------------- ACTION LISTENER FOR ABOUT MENU ------------------------------------------ */

        reportItem.addActionListener ( new ActionListener()
        {
            public void actionPerformed ( ActionEvent e )
            {

                    engine.loadLog();
                    mainPanel.setVisible (false);
                    mainPanel = home();
                    toolBar.setVisible(false);
                    vasToolBar.setVisible(false);
                    cpToolBar.setVisible(false);
                    add ( mainPanel, BorderLayout.CENTER );
                    add ( toolBar, BorderLayout.NORTH );
                    toolBar.setVisible(false);
                    mainPanel.setVisible ( true );
                    pack();
                    setSize(500, 500);
            }
        });

今、

私の質問は、エンジンのメソッドで読み取ったものを GUI パーツ内に出力するにはどうすればよいですか? それらを JLabel または JTextArea 内に配置したいと考えています。どうすればいいですか?

4

3 に答える 3

2

おそらく、ファイルから読み取ったテキストを保持する文字列をloadLog メソッドが返すようにし、GUI でメソッドを呼び出して、返された文字列を必要に応じて表示する必要があります。また、I & O を実行するときは、空の catch ブロックを使用しないでください。

于 2012-11-03T19:30:30.803 に答える
2

ファイル IO 操作は、ブロッキング/時間がかかると見なされます。

イベント ディスパッチ スレッドでそれらを実行することは避けてください。これにより、UI の更新が開始されなくなり、アプリケーションがハングまたはクラッシュしたように見えます。

a を使用しSwingWorkerてファイルの読み込み部分を実行し、各行をpublishメソッドに渡し、メソッドを介してテキスト領域に行を追加できprocessます...

public class FileReaderWorker extends SwingWorker<List<String>, String> {

    private final File inFile;
    private final JTextArea output;

    public FileReaderWorker(File file, JTextArea output) {
        inFile = file;
        this.output = output;
    }

    public File getInFile() {
        return inFile;
    }

    public JTextArea getOutput() {
        return output;
    }

    @Override
    protected void process(List<String> chunks) {
        for (String line : chunks) {
            output.append(line);
        }
    }

    @Override
    protected List<String> doInBackground() throws Exception {
        List<String> lines = new ArrayList<String>(25);
        java.io.File cpFile = getInFile();
        if (cpFile != null && cpFile.exists() == true) {
            File file = cpFile;

            BufferedReader br = null;

            String strLine = "";
            String logPrint = "";
            try {
                // New Buffer Reader
                br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
                while ((strLine = br.readLine()) != null) {
                    StringTokenizer st = new StringTokenizer(strLine, ";");
                    while (st.hasMoreTokens()) {
                        logPrint = st.nextToken();
                        publish(logPrint);
                    }
                }
            } catch (Exception e) {
                publish("Failed read in file: " + e);
                e.printStackTrace();
            } finally {
                try {
                    if (br != null) {
                        br.close();
                    }
                } catch (Exception e) {
                }
            }
        } else {
            publish("Input file does not exist/hasn't not begin specified");
        }            
        return lines;
    }
}

詳細については、Lesson: Concurrency in Swingを参照してください。

于 2012-11-03T19:38:04.250 に答える
0

私があなたの質問を誤解しているなら、私を許してください。

テキスト ファイルを 1 行ずつ読み取り、各行を JTextArea に追加します。

        BufferedReader reader = new BufferedReader(new FileReader("pathToFile"));  //This code creates a new buffered reader with the specified file input.  Replace pathToFile with the path to your text file.
        String text = reader.readLine();
        while(text != null) {
        myTextArea.append("\n" + text);  //Replace myTextArea with your JTextArea
        text = reader.readLine();
        }
于 2012-11-03T19:36:11.620 に答える