// ファイルを 1 つ選択し、選択したファイルの内容を読み込み、1 行 1 行の内容をウィンドウに表示するプログラム // ただし、ファイルの行数は最大 100 行 import java.io.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class FileDisplay extends JFrame implements ActionListener { JMenuBar bar; // bar: メニューを表示するバー JMenu fileMenu; // fileMenu: 「ファイル」メニュー JMenuItem openItem; // openItem: 「開く」のメニュー項目 JLabel[] lineLabel = new JLabel[100]; // lineLabel: ファイルの 1 行 1 行を表示するためのラベル (ファイルを読み込むのが最大 100 行なので、ラベルも 100 個 JPanel labelPanel; // lineLabel を貼り付けるためのパネル JScrollPane scroll; // lineLabel を貼付けた labelPanel にスクロールを付けるためのもの public FileDisplay() { getContentPane().setLayout(new BorderLayout()); // メニューバーとメニュー、メニュー項目の作成 bar = new JMenuBar(); setJMenuBar(bar); fileMenu = new JMenu("ファイル"); bar.add(fileMenu); openItem = new JMenuItem("ファイルを開く"); openItem.addActionListener(this); fileMenu.add(openItem); // lineLabel や、lineLabel を貼り付けるためのパネル、スクロールの作成 labelPanel = new JPanel(); // labelPanel には、lineLabel を縦に 100 個貼り付けるので、GridLayout を設定 labelPanel.setLayout(new GridLayout(100, 1)); int i; for (i = 0; i < 100; i = i + 1) { // lineLabel の作成と labelPanel への貼り付け (ただし、テキストの設定はなし。テキストの設定は、後のファイルの読み込み処理のときに行う) lineLabel[i] = new JLabel(); labelPanel.add(lineLabel[i]); } // lineLabel を貼り付けた labelPanel にスクロールバーを付加 scroll = new JScrollPane(labelPanel); getContentPane().add(scroll, BorderLayout.CENTER); // ウィンドウの表示 setSize(400, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public void actionPerformed(ActionEvent e) { // 「ファイル」→「ファイルを開く」を選択されたときの処理 // 読み込むファイルを選択するための JFileChooser を表示 JFileChooser chooser = new JFileChooser(); int code = chooser.showOpenDialog(null); if (code == 0) { // ファイルが選択されたときの処理 try { // 選択されたファイルを開いて、中身を読み込み File readFile = chooser.getSelectedFile(); FileReader fr = new FileReader(readFile); BufferedReader br = new BufferedReader(fr); // lineNum: 何行読み込んだかをカウントするための変数 int lineNum = 0, i; String line; // ファイルの読み込み処理 (ただし、ファイルは最大 100 行までなので、100 行がきたら、読み込みが終わっていなくても while 文を終了 while ((br.ready()) && (lineNum < 100)) { // 1 行 1 行の読み込み処理 line = br.readLine(); // 読み込んだ行を、lineLabel の表示用テキストとして設定 lineLabel[lineNum].setText(line); // 何行読み込んだかのカウント処理 lineNum = lineNum + 1; } } catch(IOException ioe) { System.out.println("選択されたファイルを開けません。"); } } } public static void main(String[] args) { // ウィンドウの表示 new FileDisplay(); } }