• 締切済み

【Swing JAVA】JLabelの表示更新

SwingのJLabelにデータを追加した場合の更新方法について教えてください。 フォルダを指定して、フォルダ内のファイル一覧をJListに追加するプログラムを作っています。 実行すると、JListに表示される場合とされない場合があります。 原因についてお伺いします。 ↓ソースはこちらにアップしています。 アップローダ(コード) http://kie.nu/18VN パスワード oshiete プロジェクトはjp.co.test.lectureとしました。 ---- JListに関連する流れを書きます。 空っぽのJListをJFrameに追加。frame.setVIsible(true)とし表示。 (このとき、DefaultListModelを使用した。) DefaultListModel model = new DefaultListModel(); JList list = new JList(model); ↓ フォルダを指定するアクションをすると、フォルダ内のファイル一覧を取得し、 最終更新日のリストをJListに追加。 model.addElement(フォルダ一覧のデータインスタンス); フォルダ一覧クラスには、toStringをオーバーライドし最終更新日が表示されるようにした。 こんな流れです。 なぜ、同じフォルダを探索しているのにもかかわらず、 JListに追加されるときと、されないときがあるのか不思議でたまりません。 考えられる原因を教えてください。 お願いします。 (自分で考えた原因) ・JListの描写が非同期で行っているため? ・表示位置が変? 結局のところわかりません。 (ソースコードまで見ていただける方向け) GuiManager.reviseListメソッドあたりが怪しいかなと個人的には踏んでいるのですが…

  • Java
  • 回答数1
  • ありがとう数0

みんなの回答

  • hirotn
  • ベストアンサー率59% (147/246)
回答No.1

reviseListを何箇所か呼び出していますが、呼び出し個所によって、「追加される・追加されない」の場合分けが考えられる、ということはないでしょうか。

関連するQ&A

  • 【Java】モーダルDLG内でリストを表示

    Javaを学習し始めて間もない初心者です。よろしくお願いします。 ======================================== 開発環境:Eclipse SDK(Version: 3.5.0) 開発言語:Java ======================================== にて、プログラムを作成しています。 メインDLGの中に配置したボタンを押下したタイミングで、 モーダルDLGを開き、そのDLG内にリストを表示させたいのですが、 参考サイトなどを見ながら、とりあえずモーダルDLGは表示されましたが、 リストが表示されません。 下記に作成ソースを記載しますので、解決法をご存知の方おられましたら、 どこが悪く、どう修正すれば良いかについて、ご教示お願い致します。 なお、当方学習中の身ですので、より良いコードを書くために、 その他の指摘などももしあれば幸いです。 【ソースコード】 import javax.swing.*; import java.awt.BorderLayout; import java.awt.Dialog; import java.awt.Frame; import java.awt.event.*; import java.awt.*; public class TestList extends JFrame implements ActionListener{ Dialog dlg; Frame frm; public static void main(String[] args){ TestList frame = new TestList(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 400, 100); frame.setTitle("リスト表示"); frame.setVisible(true); } TestList(){ { // リスト表示ボタンを追加 JButton btn = new JButton("リストDLGを表示"); btn.addActionListener(this); JPanel p2 = new JPanel(); p2.add(btn); getContentPane().add(p2, BorderLayout.CENTER); } } // ボタン押下イベントを取得する関数 public void actionPerformed(ActionEvent e){ // リスト表示ボタンが押下された時 if (frm == null) { frm = new Frame("リスト"); frm.setSize(200 , 200); frm.setVisible(true); String list_n[] = {"テスト1", "テスト2", "テスト3", "テスト4", "テスト5"}; JList list = new JList(list_n); dlg = new Dialog(frm, "リスト" , true); JScrollPane sp = new JScrollPane(); sp.getViewport().setView(list); sp.setPreferredSize(new Dimension(200, 80)); JPanel p = new JPanel(); p.add(sp); dlg.add(p, BorderLayout.CENTER); } } }

    • ベストアンサー
    • Java
  • List,LinkedListの関係

    こんにちは。 今、LinkedListでつなげたコンテンツの集合を JListのように表示をしたいと思っています。 もちろん表示しながらもLinkedListの中のそれぞれのコンテンツを変更、削除、挿入などをしてもJListに反映できるようにしたいと思っています。 あるサンプルコードでは //JListを置いたパネル class ListPanel extends JPanel implements ListSelectionListener { JList list; DefaultListModel listModel; int select = -1; //選択された項目インデックス,起動時は-1 String entry; //選択された項目内容 JLabel fileLabel; //ファイル名を表示するラベル ListPanel(){ setLayout(new BorderLayout()); listModel = new DefaultListModel(); list = new JList(listModel); list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); list.addListSelectionListener(this); fileLabel = new JLabel(filename); add(fileLabel, BorderLayout.NORTH); //ファイル名を表示するラベルをJPanelに置く add(new JScrollPane(list), BorderLayout.CENTER); //listを入れたJScrollPaneをJPanelに置く } void dataRead() throws IOException{ //ファイルを読む listModel.removeAllElements(); BufferedReader din = new BufferedReader(new FileReader(filename)); while ((entry=din.readLine()) != null) { //1行読む listModel.addElement(entry); //リスト項目に追加 } din.close(); } のように JList list; DefaultListModel listModel; を使ってやっていますが、LinkedListでも同様にできるのでしょうか? たとえば・・ Jist list list = LinkedList(); といった感じですか?

    • ベストアンサー
    • Java
  • javaわかりません。。

    双方向リストと循環双方向リストをjavaで書きたいんです。。。 一応実装するメソッドに現在のリストを後ろから表示するようにしたいです。。 データは数字を入れるだけでいいので、ソースコードを教えてください。

  • ListSelectionListenerのvalueChangedメソッドが2度呼び出される

    ListSelectionListenerをセットした JListのアイテムを選択した時に呼び出されるvalue Changedメソッドが1回選択したときに2回呼び出さ れてしまいます。これはこういった仕様なのでしょう か?2回の呼び出しがどのようなタイミングで呼びだ されるのでしょうか、1回だけ呼び出されるようにす るにはどのようにすればよいのでしょうか?ご存知の 方、お願いします 実行環境 Windows2000 J2SDK 1.4.1 ****************以下問題起こるのソースコード*********** import javax.swing.*; import javax.swing.event.*; public class ListTest implements ListSelectionListener { public static void main(String[] args) { JFrame frame = new JFrame(); String[] item = {"list1","list2","list3","list4"}; JList list = new JList(item); list.addListSelectionListener(new ListTest()); frame.getContentPane().add(list); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(50,100); frame.setVisible(true); } public void valueChanged(ListSelectionEvent e) { System.out.println("list changed"); } }

  • JListに一覧にして表示

    データベースから取得した結果を JListに一覧にして表示させたいのですが、 list.setText(table);の部分の setTextメソッドでシンボルが見つけられないと エラーが出てしまいます。 JListにsetTextを使っているからなのだと思いますが、 APIを探したのですがなかなかわかりません どう対処したらよいでしょうか?? private Connection connect() throws Exception{ Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost/???"; String user = "root"; String pass = ""; Connection con = DriverManager.getConnection(url,user,pass); return con; } Bookmark(){ JTabbedPane tabbedPane = new JTabbedPane(); tabbedPane.addTab("表示", createPanel1()); } private JPanel createPanel1(){ JPanel p = new JPanel(); JList list = new JList(); JScrollPane scrollPane = new JScrollPane(); scrollPane.getViewport().setView(list); scrollPane.setPreferredSize(new Dimension(480, 340)); p.add(scrollPane); try{ //DBに接続 Connection con = connect(); //SQL発行先ほど指定したConnection con を利用 Statement stmt = con.createStatement(); String sql ="select * from Browser"; ResultSet rs = stmt.executeQuery(sql); //結果の取得 while(rs.next()){ String name = rs.getString("name"); String address = rs.getString("address"); String table = "<html><table>" + "<td>" + name + "</td>"+ "<td>"+ address +"</td>"+ "</table></html>"; list.setText(table); } //切断 con.close(); } catch(Exception ex) { System.out.println(ex);

    • ベストアンサー
    • Java
  • JAVA+SWING+WEBカメラを使用して、WEBカメラの動画を表示

    JAVA+SWING+WEBカメラを使用して、WEBカメラの動画を表示させるGUIアプリーションを開発しています。 JFrame上に「player.getVisualComponent()」をaddするとフレーム全体に画像が表示されますが、以下のソースコードの様に「player.getVisualComponent()」をJPanel上にaddするとPanelのサイズ一杯に動画が表示されるのではなく、WEBカメラのデフォルトサイズで必ず表示されてしまいます。 JPanel上で任意の大きさでWEBカメラからの動画を表示させることは可能なのでしょうか? ちなみにWEBカメラの動画表示アプリのソースコードは以下の通りです。 import javax.media.*; import javax.swing.*; public class ImageView { public static void main(String args[]) throws Exception { JFrame frame = new JFrame("ImageView"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Player player = Manager.createRealizedPlayer(new MediaLocator("vfw://0")); JPanel panel = new JPanel(); panel.add(player.getVisualComponent()); frame.setBounds(100, 100, 640, 480); frame.getContentPane().add(panel); frame.setVisible(true); player.start(); } } 宜しくお願いいたします。

    • ベストアンサー
    • Java
  • java教えてください。

    双方向リストをjavaで書きたいんですけどここまで書いて双方向リストになってるか不安になってきました。 これは双方向リストになっていますか? class MyListw{ int data; MyListw next = null; //次のノードへのポインタ MyListw prev = null; //前のノードへのポインタ MyListw(int data){ this.data = data; } void insertTail(MyListw node){ //リストの最後へ追加 MyListw tmp = this; while(tmp.next != null){ tmp = tmp.next; } tmp.next = node; node.prev = tmp.next; } void insertHead(MyListw node){ //リストの先頭へ追加 node.next = this.next; this.next = node; node.prev = this.next; } void insert(int head, MyListw node){ //リストの途中へ新規データを挿入 MyListw tmp = this; while(tmp != null){ if(tmp.data == head){ break; } tmp = tmp.next; } node.next = tmp.next; tmp.next = node; node.prev = tmp.next; } void delete(int here, MyListw node){ //リストからデータを1つ削除 MyListw tmp = this; while(tmp != null){ if(tmp.data == here){ break; } tmp = tmp.next; } node = tmp.next; tmp.next.prev = node; tmp.next = node.next; node.next.prev = tmp.next; node.next = null; node.prev = null; } void deleteHead(){ //先頭のノードを削除 MyListw tmp = next; this.next = tmp.next; tmp.next.prev = this.next; tmp.next = null; tmp.prev = null; } void deleteTail(){ //最後のノードを削除 MyListw tmp = this; MyListw lastList = null; while(tmp.next != null){ lastList = tmp; tmp = tmp.next; } lastList.next = null; lastList.prev = null; } void show(){ MyListw tmp = next; while(true){ System.out.print(tmp.data); if(tmp.next == null) break; tmp = tmp.next; } System.out.println(""); } void showTail(){ } } class MyListwApp{ public static void main(String[] args){ MyListw list = new MyListw(0); //初期ダミー System.out.println("最後に追加"); list.insertTail(new MyListw(1)); list.show(); System.out.println("逆順に表示"); list.showTail(); System.out.println("\n"); list.insertTail(new MyListw(5)); list.show(); System.out.println("逆順に表示"); list.showTail(); System.out.println("先頭に追加"); list.insertHead(new MyListw(8)); list.show(); System.out.println("逆順に表示"); list.showTail(); System.out.println("\n"); list.insertHead(new MyListw(9)); list.show(); System.out.println("逆順に表示"); list.showTail(); System.out.println("途中からデータを追加"); list.insert(1, new MyListw(2)); list.show(); System.out.println("逆順に表示"); list.showTail(); System.out.println("\n"); list.insert(2, new MyListw(3)); list.show(); System.out.println("逆順に表示"); list.showTail(); System.out.println("リストからデータを削除"); list.delete(8, new MyListw(1)); list.show(); System.out.println("逆順に表示"); list.showTail(); System.out.println("先頭のノードを削除"); list.deleteHead(); //先頭のノードを削除 list.show(); System.out.println("逆順に表示"); list.showTail(); System.out.println("\n"); list.deleteHead(); list.show(); System.out.println("逆順に表示"); list.showTail(); System.out.println("最後のノードを削除"); list.deleteTail(); //最後のノードを削除 list.show(); System.out.println("逆順に表示"); list.showTail(); System.out.println("\n"); list.deleteTail(); list.show(); System.out.println("逆順に表示"); list.showTail(); } }

    • ベストアンサー
    • Java
  • エクスプローラー(インターネットではない)で表示が更新されません

    エクスプローラ(ファイル、フォルダー表示など)でフォルダー、ショートカットなどを新規作成、名前を変更等しても表示が更新されません。表示→最新の情報に更新(R)すれば更新できます。なにが原因でしょうか?XP professionalSP2です

  • Outlook Express追加フォルダの表示

    Outlook Express で追加フォルダが、フォルダ一覧に表示されません。 フォルダの追加で「保存フォルダ」を作り、メールを移動しましたが、フォルダのリストに、表示されないため、内容を見ることができません。 移動するときは、「保存フォルダ」が表示されるので、フォルダが作られていることは、間違いありません。 また、「フォルダ」をクリックすると、「新規作成」は、操作できますが、「名前の変更」「削除」は、グレーになっており、操作できません。合わせて、対策をご教示お願い致します。

  • 「更新が必要」と表示。どう処理したら?

    Windows XPを使用しています。アイコンをクリックし、ファイル一覧を見ると、「状態」の欄に「更新が必要」と表示されています。 試しに「更新が必要」と表示されているファイルを一つ更新してみたら、そのフォルダから消えてしまいました。 1.これはどういう意味なのでしょうか。 2.どう処理すればよいのでしょうか。 3.消えたファイルはどこへ行ったのでしょうか。 わかる方、教えて下さい。 情報が不足であれば補足いたします。