- ベストアンサー
開いたファイルをJListに追加したい
最近、Swingを勉強し始めたばかりです。 開くボタンを作りファイルチューザでcsvファイルを開き、1行ずつ引っ張り出してきて全データをJListに表示したいのですがうんともすんともいいません。 知恵をお貸しくださいお願いします(T_T) 鈴木一郎,東京都,渋谷110,1960 松井一郎,大阪府,大阪市119,1928 class SwingTest extends JFrame implements ActionListener{ private static JFrame frame; private JFileChooser chooser = new JFileChooser(); private Container pane = getContentPane(); private DefaultListModel myList = new DefaultListModel(); 略 public void actionPerformed(ActionEvent e){ String s = e.getActionCommand(); if(s.equals("Open")==true){ JFileChooser chooser = new JFileChooser(); int returnval = chooser.showOpenDialog(this); li.setPreferredSize(new Dimension(500,300)); if(returnval == JFileChooser.APPROVE_OPTION){ File file = chooser.getSelectedFile(); FileInputStream fis = new FileInputStream( file ); InputStreamReader isr = new InputStreamReader( fis ); BufferedReader br = new BufferedReader( isr ); String line = br.readLine(); String[] token = line.split(","); String str = token[0] + "\t" + token[3]; myList.addElement(str); li.setModel(myList); }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 どこに問題があるのかよくわからなかったので、似たようなサンプルを作ってみたのですが、ちゃんと動きます。 ↓のコードを試してみるとどうなりますか? (全角スペースを半角スペースに変換してからコンパイルしてください) import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ListTest extends JFrame implements ActionListener { JList list; JButton button; public static void main(String[] args) { ListTest frame = new ListTest(); frame.setSize(400, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } public ListTest() { button = new JButton("追加"); button.addActionListener(this); getContentPane().add(button, BorderLayout.SOUTH); list = new JList(); JScrollPane scroll = new JScrollPane(list); getContentPane().add(scroll, BorderLayout.CENTER); } public void actionPerformed(ActionEvent event) { DefaultListModel model = new DefaultListModel(); model.addElement("おはよう"); model.addElement("こんにちは"); model.addElement("こんばんは"); list.setModel(model); } } ------------------------------------------- あと、あらかじめDefaultListModelを使ったJListを作っておき、データを追加したり削除したりするときは、listModelを操作したほうが、すっきりすると思うのですが、どうでしょう? こんな↓感じです。 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ListTest extends JFrame implements ActionListener { JList list; DefaultListModel model; JButton button; public static void main(String[] args) { ListTest frame = new ListTest(); frame.setSize(400, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } public ListTest() { button = new JButton("追加"); button.addActionListener(this); getContentPane().add(button, BorderLayout.SOUTH); model = new DefaultListModel(); list = new JList(model); JScrollPane scroll = new JScrollPane(list); getContentPane().add(scroll, BorderLayout.CENTER); } public void actionPerformed(ActionEvent event) { model.clear(); model.addElement("おはよう"); model.addElement("こんにちは"); model.addElement("こんばんは"); } }
その他の回答 (1)
- koki_m
- ベストアンサー率83% (45/54)
こんばんは。 まずはもう少し「うまくいかない箇所」がどこなのかを絞り込む必要がありそうですね。 ボタンのアクションメソッドが呼ばれないのか、ファイル選択まではできるけどリストにデータが表示されないのかも分かりません。 例えば、まずはボタンアクション抜きにして、 myList.addElement(str); のところに適当な文字列を入れて動かしてみて、それが表示されればJListは問題ないことが分かります。 一度に ・ボタンアクション ・ファイル参照取得 ・ファイルオープン ・テキスト処理 ・リストモデル編集 ・JListビューの更新 と多くのことをやろうとしても、何が分からないのかが分からない状態になってしまうと思います。 上から順番に、どこまでできているのかを調査してみてください。
補足
お返事ありがとうございます! 書き方がまずかったようで…(汗) ・ボタンアクション ・ファイル参照取得 ・ファイルオープン ・テキスト処理 ボタンを押すとファイルダイアログが開き、テキストファイルを選択、データの1行分だけを取り出してSystem.out.printlnで表示させることは出来ました。 ・リストモデル編集 ・JListビューの更新 strに1行分を取り出すことは出来たので、 private DefaultListModel myList = new DefaultListModel(); を使い、アクションの部分でmyList.addElement(str); をしたのですが何も表示されませんでした。 エラーが出なかったのでわからなくなり、書き込みさせてもらいました。 お手数ですがヒントをいただけたらと… よろしくお願いします(汗)
お礼
お返事ありがとうございます! サンプルありがとうございます! 参考にさせていただいたおかげで出来ました! DefaultListModelの書き方がまずかったようです(汗) 感謝感激です(*´∀`*)