2

以下のコードは、折れ線グラフを作成するために使用されます。TextArea に整数を表示することはできますが、テキスト ファイルの整数の上の文を表示することはできません。このプログラムを修正するにはどうすればよいですか?

テキストファイルのスクリーンショットを以下に示します。

テキスト ファイルの最初の 3 行も TextArea に出力したいと考えています。

ここに画像の説明を入力

import java.awt.BorderLayout;   
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
import org.jfree.chart.*;
import org.jfree.chart.plot.*;
import org.jfree.data.xy.*;

public class Pio {
  static JFrame frame1 = new JFrame("Graph");
      static String URL = null;
      static JTextArea txt = new JTextArea();
      static JPanel panel = new JPanel();
 public static void main(String[] args) throws IOException {

   JButton but = new JButton("Open file");

    ![enter image description here][2]

    panel.add(but);    


    frame1.add(panel, BorderLayout.WEST);

   frame1.setVisible(true);

frame1.setSize(1000,400);

    but.addActionListener(new ActionListener()

                        {


                         public void actionPerformed(ActionEvent e) 

                         {



                         JFileChooser chooser = new JFileChooser();

                         int ret = chooser.showDialog(null, "Open file");

                         if (ret == JFileChooser.APPROVE_OPTION)

                           {

                             File file = chooser.getSelectedFile();

                             URL = file.getAbsolutePath();

                           }

                         File f = new File(URL);

                            FileReader inputF = null;

                        try {

                    inputF = new FileReader(f);

                           }
                            catch (FileNotFoundException e1) {
                                                                e1.printStackTrace();

                                                 }

                            BufferedReader in = new BufferedReader(inputF);

                             int[] a = new int[100];

                                       int[] b = new int[100];

                                        String s=null;
                    try {

                                       s = in.readLine();

                                    } 

                                 catch (IOException e1) {

                                     e1.printStackTrace();

                                    }

                               int i = 0;

                             while (s != null && i < 100)

                                            { // your arrays can only hold 1000 ints

                                        String pair[] = s.split(" ");

                                        a[i] = Integer.parseInt(pair[0]);

                                        b[i] = Integer.parseInt(pair[1]);

                                            i++; // don't forget to increment

                                            try {

                                                s = in.readLine();

                                            }

                                          catch (IOException e1) {
                                                                                  e1.printStackTrace();
                                    }
                                }

                            try {

                                in.close();

                                    } 

                                      catch (IOException e1) {
                                                                           e1.printStackTrace();

                                }

                        System.out.println("the output of the file is " + f);

                            XYSeries data = new XYSeries("Line Graph");

                            int n = a.length;

                            for (int j = 0; j < n; j++) {

                                    data.add(a[j], b[j]);

                            }

                            XYDataset xY = new XYSeriesCollection(data);

                                 JFreeChart chart=ChartFactory.createXYLineChart(

                                      "line graph",

                                            "Cycles",

                                           "Temperature",

                                                xY,

                                           PlotOrientation.VERTICAL,

                                           true,

                                          true,

                                           true);

                               ChartPanel p=new ChartPanel(chart);

                                p.setVisible(true);

                                p.setLocation(100,100);

                                p.setSize(500,500);

                              frame1.add(p,BorderLayout.EAST);

                                         }
                        });
            }

}
4

2 に答える 2

4
  1. については何もありませんJTextArea。コンストラクターJTextArea(int rows, int columns)を使用してください

  2. 、このプットJTextArea、またはまたは領域に置くJScrollPaneJScrollPaneEASTWEST

  3. or領域JPanelに置くJButton_SOUTHNORTH

  4. 何もChartPanel返さない場合PrefferedSize(私はそうは思わない)、またはこの値が正しくない場合は、 own に設定し、エリアPrefferedSizeに配置しますChartPanelCENTER

  5. setSizeご覧のとおり、に関するコード行は APIJFrameに実装されていますBorderLayout

  6. pack()の代わりに使用setSize()

  7. setLocation()もし必要なら

  8. ActionListener(コード ロジック)の最後のコード行は、

    frame.validate(); frame.repaint(); frame.pack();

  9. この形式 (コード ロジック) では、無責任なSwing GUI間、にラップするか、この長くて難しいタスクをバックグラウンド タスクにリダイレクトするために使用します。FileIOMouse and Key EventsFileIORunnable#TreadSwingWorker

  10. ChartPanelローカル変数として ( e として)作成しJFram、最初のコード行はActionListener必ず

.

frame.remove(ChartPanel);
于 2012-06-11T10:49:08.107 に答える
3

JSplitPane を使用できる 2 つのコンポーネントを表示します。

配列にデータをロードするときに、それを JTextArea (サンプル コードの area1) に追加します。

final JTextArea area1 = new JTextArea();
...
area1.append("X=" + a[i] + " Y=" + b[i] + "\n");

次に、グラフをフレームに追加するのではなく、Chart と TextArea の両方を JSplitPane に追加します。

ChartPanel p = new ChartPanel(chart);
JSplitPane splitpane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
frame1.add( splitpane , BorderLayout.CENTER );
splitpane.add(p);
splitpane.add(area1);
pane.validate();
frame1.validate();
frame1.repaint();  

使用中の JSplitPane

JTextArea が使用するデータを追加するには

  area1.append("Creating a line graph\n");
  area1.append("Selected file " + f + "\n");
  while (s != null && i < 100) { // your arrays can only hold 1000 ints
    String pair[] = s.split(" ");
    try{
      a[i] = Integer.parseInt(pair[0]);
      b[i] = Integer.parseInt(pair[1]);
      area1.append("X=" + a[i] + " Y=" + b[i] + "\n");
    } catch (NumberFormatException e) {
       area1.append(s + "\n");
    }
    try {
      s = in.readLine();
      i++; // don't forget to increment
    } catch (IOException e1) {
      e1.printStackTrace();
    }
  }
  area1.append("Finished reading data\n");
  ...

この例では、ヘッダーが失敗しparseInt、(失敗した場合) String を追加すると想定していsます。

JTextArea

于 2012-06-11T10:59:28.010 に答える