JScrollPane上のJTableの再描画

このQ&Aのポイント
  • JScrollPane上のJTableの再描画に関しての問題と対処方法について
  • スクロールバーやセルを操作すると初期表示に戻る問題の解決方法について
  • JScrollPane上でのJTableの再描画時の不具合と修正方法について
回答を見る
  • ベストアンサー

JScrollPane上のJTableの再描画

JPanel上で,以下の初期化関数を作って,データが更新されたときに,この初期化関数を再度呼び出して,テーブルを作り直しています. 描画直後は,正しく表示されるのですが, スクロールバーに触ったり,セルをクリックしたりすると, 初めに作成したテーブルの表示に戻ってしまいます. 何が原因で,どのように対処すれば良いのでしょうか? ご回答いただけますよう,よろしくお願いいたします. public void init_table() { tablemodel1 = new DefaultTableModel(column_names1, text.keyword_num); table1 = new JTable(tablemodel1); scrollt1 = new JScrollPane(table1); add(scrollt1);     以下略 }

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

質問者が選んだベストアンサー

  • ベストアンサー
  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

何にadd()しとんのや? レイアウトマネージャはちゃんとしとんのか? ふつうSwingのコンテナなら、 古いコンポーネントを remove()して repaint()して 新しいコンポーネントを add()して revalidate()するのが基本的な手続きどすえ。

sunasearch
質問者

お礼

ご回答ありがとうございます. 上記関数の先頭で, remove(scrollt1); を実行すると直りました. なるほどですね. malloc, freeと同じで後片付けが必要とは,盲点でした. いやー天才ですね!!

関連するQ&A

  • javaのJTableのupdateについて

    javaのJTableについて質問します。 Q1)下記のコードは元のtabledataをupdateしていますが、updateの内容を元のtabledataに 反映する設定はありますか(元のtabledataの内容は変化します)? =========================================== import javax.swing.*; import java.awt.event.*; import java.awt.BorderLayout; import java.awt.Dimension; import javax.swing.table.DefaultTableModel; public class SwingTest extends JFrame{ private String[][] tabledata = { {"日本", "3勝", "0敗", "1分"}, {"クロアチア", "3勝", "1敗", "0分"}, {"ブラジル", "1勝", "2敗", "1分"}, {"オーストラリア", "2勝", "2敗", "0分"}}; private String[] tabledata2 = {"イギリス", "2勝", "0敗", "2分"}; private String[] columnNames = {"COUNTRY", "WIN", "LOST", "EVEN"}; public static void main(String[] args){ SwingTest test = new SwingTest("SwingTest"); test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); test.setVisible(true); } SwingTest(String title){ setTitle(title); setBounds( 10, 10, 300, 200); DefaultTableModel tableModel = new DefaultTableModel(columnNames, 0); JTable table = new JTable(tableModel); for(int i = 0 ; i < 4 ; i++){ tableModel.addRow(tabledata[i]); } tableModel.setValueAt("2勝", 1, 1); tableModel.setValueAt("2敗", 1, 2); JScrollPane sp = new JScrollPane(table); sp.setPreferredSize(new Dimension(250, 90)); JPanel p = new JPanel(); p.add(sp); getContentPane().add(p, BorderLayout.CENTER); } }

    • ベストアンサー
    • Java
  • JTableとJScrollPaneの問題

    JTableとJScrollPaneを使って、Excelのsheetのような表を作成したいのですが、 列の入れ替えが可能になっています。 列の入れ替えを出来ないようにしたいのですが、どうしたら良いのでしょうか? 教えて下さい。 また、各セルをセンターリングで表示したいです。 (以下の例の場合、Aと×とかです。) テストプログラム import java.awt.*; import javax.swing.JTable; import javax.swing.JPanel; import javax.swing.JFrame; import javax.swing.JScrollPane; public class testTable extends JFrame { public testTable() { Object[][] data = { {"A","B","×","A","A","×","B",}, {"C","C","C","C","C","×","B",}, {"×","×","×","A","A","×","B",}, {"F","F","F","A","A","×","B",}, }; String[] columnNames = {"日", "月", "火", "水", "木", "金", "土"}; JTable tblSchedule = new JTable(data, columnNames); JScrollPane scrollPane = new JScrollPane(tblSchedule); getContentPane().add(scrollPane, BorderLayout.CENTER); } public static void main(String[] args) { testTable frame = new testTable(); frame.pack(); frame.setVisible(true); } }

  • JTableとJScrollPaneについて

    JTableとJScrollPaneでテーブルを横や縦にスクロールできるようにして いるのですが、テーブルを横にスクロールさせたときに、0行目のカラム は常に左側に表示させるようにしたいのですが、どうやればよいでしょうか? カラムの移動とか編集はできなくてもよいです。 分かりにくい質問の仕方で申し訳ないのですが、回答よろしくお願いします。

    • ベストアンサー
    • Java
  • javaのpanelが表示されません

    下記のプログラムを作ったんですが、eclipseで実行するとフレームは表示されますが、空のフレームのような状態で、panelやボタンなどは表示されません。mainとは別のクラスで作成してるからなんでしょうか?よろしくお願いします。 import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class Table0 { public static void main(String[] args) { new Frame0(); } } class Frame0{ JFrame frame; JPanel panel; JScrollPane jsp; JTable table; DefaultTableModel dtm; public Frame0(){ frame=new JFrame("table"); frame.setBounds(30, 30, 300, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); table=new JTable(8,5); jsp=new JScrollPane(table); jsp.setPreferredSize(new Dimension(250, 70)); panel=new JPanel(); panel.add(jsp); Container c=frame.getContentPane(); c.add(panel,BorderLayout.CENTER); } }

    • ベストアンサー
    • Java
  • javaで2パネルにテーブルデーターを表示

    今日は! javaの初心者で、初心者なりに、フレームに2個のパネルを作成し、各パネルに同じ テーブルデーターを表示するコードを作ってみましたが、旨く行きません。 下記の添付コードで、不具合点の改造箇所をお教え頂けますと大変助かります。 //================================== package packageA; import java.awt.BorderLayout; import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; public class JTableTest2 extends JFrame{ public static void main(String[] args){ JTableTest2 test = new JTableTest2("JTableTest2"); test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); test.setVisible(true); } JTableTest2(String name){ setBounds( 0, 0, 300*2, 140*2); setTitle(name); String data[][] = { //テーブルデータを作る {"田辺太郎","89","79","100","100"}, {"山田大助","68","55","72","100"}, {"佐藤恵美","78","69","81","100"} }; //列名の配列 String title[] = {"名前","数学","英語","国語","音楽"}; JTable table = new JTable(data,title); //テーブルデータと列名でテーブルを作る JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); JScrollPane sp = new JScrollPane(table); sp.setPreferredSize(new Dimension(250, 80)); p1.add(sp); //JPanelにJScrollPaneを結合する p2.add(sp); //JPanelにJScrollPaneを結合する getContentPane().add(p1, BorderLayout.WEST); getContentPane().add(p2, BorderLayout.EAST); } } 以上、宜しくお願いします。

    • ベストアンサー
    • Java
  • JScrollPaneのオブジェクトは位置位置

    JScrollPaneについて、質問させて頂きます。 JScrollPaneに、JTextAreaを縦一列に配置したJPanelを追加しようとしたのですが、何故かJScrollPaneに配置すると、JPanel内のJTextAreaの配置が横一列になってしまいます。 つまり、現在は TEST1 TEST2 TEST3 TEST4....(JTextAreaを並べたJPanelです) となっているJScrollPaneを Test1 Test2 Test3 Test4 のように表示したいのです。 大学の授業に絡むコードですので全てを貼付けるとネットから拾ってきたのではと思われてしまうため、全ては貼付けられませんがコードの一部を張りつけさせて頂きます。 まずはJScrollPaneの設定ですが private JScrollPane getScroll() { if (scroll == null) { scroll = new JScrollPane(innerHomeTimeLine); scroll.setPreferredSize(new Dimension(width, height)); scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); scroll.setWheelScrollingEnabled(true); } return scroll; } としてJScrollPaneを作成しています、innerHomeTimeLineはJTextAreaを縦一列に並べたJPanelです。 このJScrollPaneを this.add(getScroll(),BorderLayout.NORTH); でJPanelに追加し、そのJPanel(homeTimeLine)をthis.add(homeTimeLine,BorderLayout.CENTER); でJAppletに追加し、表示しています。 JPanel(innerHomeTimeLine)そのものをJAppletに追加すると縦一列に並んだまま表示出来るのは確認しているので、JScrollPaneの設定の問題だと思うのですが、どうすれば良いのでしょうか.... やり方をご存知の方がいましたら、解答して頂けると助かります、宜しくお願いします。 さすがにこのコードだけでは解答は無理、といったことでしたら、必要な部分を教えて頂ければ、抜き出して追記させて頂きます。

    • ベストアンサー
    • Java
  • JScrollPaneで、表示がおかしくなります

    いつも、お世話になっております。 JScrollPaneを使って、大きなサイズのJpanelを表示しようとしていますが、Jpanelのheightが770ピクセルを超えたあたりから、上で表示したものが重なって表示されてしまったりして、正常に表示できなくなってしまい困っています。 Jpanelでは文字や線などを描画して表示しているので、ダブルバッファリングしていないのかと考え、調べてみましたが、ダブルバッファは行っていました。 回避する方法等をご存知でしたら、教えていただけないでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • JTableでスクロールバーが表示されない

    JTableで表を作成しました。 表示はされているのですが、 スクロールバーが表示されません。 コードは下記の通りです。 どうか宜しくお願いいたします。 ■Java import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; public class ren32 extends JApplet{ Container c; public void init(){ c = this.getContentPane(); c.setLayout(null); String[] cname = { "name","comment","test1","test2", "(0)","(1)","(2)","(3)","(4)", }; Object[][] cell = { {"","","","","","","","",""}, }; JTable table = new JTable(cell, cname); JScrollPane sp = new JScrollPane(table); sp.setBounds(10,10,750,380); c.add(sp); } } ■html <html> <head> <title>Ren1</title> <body bgcolor=white text=black> <applet code="ren32.class" width="800" height="500"> </applet> </head> </html>

    • ベストアンサー
    • Java
  • スクロール表示

    お願いします。 初めてswingに挑戦中なのですが・・・ tableをスクロール表示させたいのですがどうしてもできません。どうしたらよいでしょうか?教えてください import java.lang.*; import javax.swing.*; import javax.swing.table.*; import java.awt.*; public class SwingTableApp extends JFrame { public JTable table; public JLabel label; public SwingTableApp(String[][] data) { super("parallel Machine Scheduling"); setLocation(50,50); setSize(400,700); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setLayout(null); DefaultTableModel tableModel = new DefaultTableModel(); for(int k=0; k<data[0].length; k++){ tableModel.addColumn("TEST"); }//列の設定 for(int j=0; j<data.length; j++){ tableModel.addRow(data[j]); }//行の設定 table = new JTable(tableModel); table.setLocation(10,10); table.setSize(2000,200); getContentPane().add(table); label = new JLabel("目的関数"); label.setLocation(10,210); label.setSize(100,25); getContentPane().add(label); } }

    • ベストアンサー
    • Java
  • Swing のJScrollPane について教えてください

    現在、Swing を使用して以下の様な処理のアプレットを作成しています。 ---------------------------------------------------------------  // 画面構成  JPanel p = new JPanel();  JScrollPane sp = new JScrollPane(   p,   ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,   ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED  ); ---------------------------------------------------------------  // パネルサイズの調整  public void resizePanel()  {   p.setPreferredSize(new Dimension(400, 少しづつ増やす));   p.revalidate();  } ---------------------------------------------------------------  // 一番下までスクロールさせる  public void scrollToMaximun()  {   JScrollBar sb = sp.getVerticalScrollBar();   sb.setValue(sb.getMaximum());  } --------------------------------------------------------------- 処理内容は、発生したデータを JPanel に時系列に描画していき、 常に一番下までスクロールさせるという物です。 具体的には、データが発生する度に、描画 & resizePanel() & scrollToMaximun() を行います。 その際、スライダが、一番下までスクロールされず、前回のサイズの 最大値に設定されてしまいます。 根本的なやり方がマズイのか、何がが足りないのかも分からない状態です。 申し訳ございませんが、ご教授頂いたいと思います。

    • ベストアンサー
    • Java

専門家に質問してみよう