javaのJTableのupdateについて

このQ&Aのポイント
  • javaのJTableでのデータのupdate方法について質問します。
  • 元のtabledataをupdateしても、元のtabledataには反映されません。
  • 要件を満たすためには、update後に元のtabledataに値をセットする必要があります。
回答を見る
  • ベストアンサー

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
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
  • HNEX
  • ベストアンサー率62% (43/69)
回答No.1

DefaultTableModelのコンストラクタにVector渡せば、渡したVectorが直接変更されます。 こんな感じで Vector<Vector<Object>> data = new Vector<>(); Vector<Object> columns = new Vector<>(Arrays.asList(columnNames)); DefaultTableModel tableModel = new DefaultTableModel(data, columns); JTable table = new JTable(tableModel); for (int i = 0; i < 4; i++) { tableModel.addRow(tabledata[i]); } System.out.println(data.get(1).get(1)); // 3勝 tableModel.setValueAt("2勝", 1, 1); tableModel.setValueAt("2敗", 1, 2); System.out.println(data.get(1).get(1)); // 2勝

bakabon_X
質問者

お礼

貴重な情報有難うございます。 これから、やってみます。

bakabon_X
質問者

補足

お礼が遅くなりまして、御免なさい やっと、使い方が解かりました。

関連するQ&A

  • 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
  • JavaのJTableのセル単体の色設定

    今日は JavaのJtableの『マウスで選択したセル』の色を赤色に設定するコードを書きましたが、セル単体でバックグランドの色が変更できまず、行単位で変更されます。 又、変更のタイミングは、他のセルを、マウス選択したときに、以前のセルの行が赤く変更になります。 Q1)セル単体で、バックグランドの変更を行い、その変更タイミングは、クリックと同時に  行う様に改善したく質問いたします。 注)Java暦は、初心者で約2週間ですが。下記にソースを添付いたしますので、宜しくお願いいたします。 //============================== package packageA; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.event.MouseEvent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class JTableTest2 extends JFrame{ public static void main(String[] args){ JTableTest2 test = new JTableTest2("T"); test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); test.setVisible(true); } JTableTest2(String name){ setBounds( 0, 0, 400, 200); setTitle(name); String d[][] = { {"A","8","7"}, {"B","6","5"}, {"C","7","6"} }; String t[] = {"名","数","英"}; DefaultTableModel tm = new DefaultTableModel(d,t); final JTable tablex = new JTable(tm); /* final JTable tablex = new JTable(tm){ @Override public Component prepareRenderer(TableCellRenderer tcr, int row, int column) { Component c = super.prepareRenderer(tcr, row, column); if (row == 2 && column == 2) { c.setForeground(Color.BLUE); c.setBackground(Color.RED); } else { c.setForeground(getForeground()); c.setBackground(getBackground()); } return c; } }; */ tablex.addMouseListener( new java.awt.event.MouseAdapter() { public void mousePressed(MouseEvent e) { int row=tablex.getSelectedRow(); int col=tablex.getSelectedColumn(); // TableCellRenderer tcr = tablex.getCellRenderer(row,col); // Component c = tablex.prepareRenderer(tcr,row,col); Component c = tablex.getComponentAt(row,col); c.setForeground(Color.BLUE); c.setBackground(Color.RED); System.out.println(" "+row+" "+col); } } ); JPanel p1 = new JPanel(); JScrollPane sp1 = new JScrollPane(tablex); sp1.setPreferredSize(new Dimension(250, 80)); p1.add(sp1); getContentPane().add(p1, BorderLayout.NORTH); } }

    • ベストアンサー
    • Java
  • javaのフレームにサイズがセットされてない?

    前回、http://okwave.jp/qa/q8069621.htmlで質問しました。 回答をもとにframe.setvisible(true)をコンストラクタの最後にするとうまくいき回答を締め切ったんですが・・・。 しかし、mainメソッドにframe.setvisible(true)を書くとフレームのタイトル部分だけとなり、 サイズがセットされないまま実行したときと同じようになってしまいます。 なぜでしょう?よろしくお願いします。 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) { Frame0 test=new Frame0(); test.setVisible(true); } } class Frame0 extends JFrame{ 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); 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でスタート画面を作っていて困っています。

    現在javaでゲームのスタート画面を作っているのですが、パネルが透過されずに困っています。 プログラムソースは import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JLabel; import javax.swing.ImageIcon; import java.awt.Container; import java.awt.BorderLayout; import javax.swing.*; import java.awt.Font; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.*; import java.awt.event.*; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JLabel; import javax.swing.ImageIcon; import java.awt.Container; import java.awt.BorderLayout; import javax.swing.border.LineBorder; import javax.swing.border.EtchedBorder; import java.awt.Color; import java.awt.Container; class Start最新版 extends JFrame{ public static void main(String args[]){ Start最新版 frame = new Start最新版("タイトル"); frame.setVisible(true); } Start最新版(String title){ setTitle(title); setBounds(10, 10, 1024, 768); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel p = new JPanel(); p.setOpaque( false ); ImageIcon icon1 = new ImageIcon("Start.jpg"); JLabel label1 = new JLabel(icon1); JLabel label2 = new JLabel(); p.add(label1); Container contentPane = getContentPane(); contentPane.add(p, BorderLayout.CENTER); JButton button1 = new JButton("ゲームを始める"); button1.setFont(new Font("Mairyo", Font.PLAIN, 30)); JPanel n = new JPanel(); n.setOpaque(false); n.setLayout(new BoxLayout(n, BoxLayout.Y_AXIS)); n.add(Box.createRigidArea(new Dimension(290,30))); n.add(button1); となっています。「ゲームを始める」ボタンだけを残して、周りのパネルを透過して画像を表示させたいのですが、うまくいきません!解決方法をご存知の方どうか教えていただきたいです!よろしくお願いします。

  • classファイルが起動しない

    classファイルをhtml内で起動したところ、クラスファイルが生成できないとjava実行時にエラーが発生します。プログラムのどこが悪いのでしょうか? <プログラム> import java.awt.*; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.io.*; import javax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.DefaultTableModel; public abstract class jyusyo1 extends JApplet implements ListSelectionListener, ItemListener { /* member class not found */ class MyListener {} public jyusyo1() { jmenubar = new JMenuBar(); jmenu1 = new JMenu("\u691C\u7D22"); jmenuitem1 = new JMenuItem("\u6F22\u5B57\u4F4F\u6240"); jmenuitem2 = new JMenuItem("\u30AB\u30CA\u4F4F\u6240"); jmenuitem3 = new JMenuItem("\u4F4F\u6240\u30B3\u30FC\u30C9"); jmenuitem4 = new JMenuItem("\u90F5\u4FBF\u756A\u53F7"); c = new JComboBox(); outString = ""; L = new JList(); items = new String[1]; defaulttablemodel = new DefaultTableModel(); t1 = new JTable(defaulttablemodel); } public void init() { String s = new String(); int i = 0; JFrame jframe = new JFrame(); jframe.setTitle("\u4F4F\u6240\u691C\u7D22"); jframe.setDefaultCloseOperation(3); JPanel jpanel = new JPanel(); jpanel.setLayout(new BorderLayout()); Container container = getContentPane(); for(int j = 0; j < 5; j++) defaulttablemodel.addColumn(str3[j]); try { BufferedReader bufferedreader = new BufferedReader(new FileReader("ken.dat")); while(bufferedreader.ready()) { try { String s1 = bufferedreader.readLine(); c.addItem(s1); i++; continue; } catch(EOFException eofexception) { bufferedreader.close(); } break; } } catch(Exception exception) { System.err.println(exception); } container.add(c); c.addItemListener(this); setLayout(new BorderLayout()); JScrollPane jscrollpane = new JScrollPane(L); L.setVisibleRowCount(10); L.setSelectionMode(0); L.addListSelectionListener(this); container.add(jscrollpane); } public void valueChanged(ListSelectionEvent listselectionevent) { } public abstract void itemStateChanged(ItemEvent itemevent); JMenuBar jmenubar; JMenu jmenu1; JMenuItem jmenuitem1; JMenuItem jmenuitem2; JMenuItem jmenuitem3; JMenuItem jmenuitem4; JComboBox c; String outString; JList L; String items[]; DefaultTableModel defaulttablemodel; JTable t1; String str3[] = { "\u30B3\u30FC\u30C9", "\u65B0\u90F5\u756A", "\u4F4F\u6240\uFF13", "\u4F4F\u6240\uFF14", "\u65E5\u4ED8" }; }

  • javaでストップウォッチが上手く作れません

    あるサイトを参考にして作ってみたんですが うまく動いてくれません、多分おかしいところだらけですが どこがダメか教えてもらえるとありがたいです package timeP; import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.border.EmptyBorder; public class timeC extends JFrame implements Runnable { private JPanel contentPane; private JTextField textField; private Thread th = null; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { timeC frame = new timeC(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public timeC() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 85); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.X_AXIS)); JPanel panel_3 = new JPanel(); contentPane.add(panel_3); panel_3.setLayout(new BorderLayout(0, 0)); textField = new JTextField(); panel_3.add(textField, BorderLayout.CENTER); textField.setColumns(10); JPanel panel_2 = new JPanel(); contentPane.add(panel_2); panel_2.setLayout(new BorderLayout(0, 0)); JButton JButtonstart = new JButton(" 開始 "); JButtonstart.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if ( th == null ) { th = new Thread ( ); th.start(); } } }); panel_2.add(JButtonstart, BorderLayout.CENTER); JPanel panel_1 = new JPanel(); contentPane.add(panel_1); panel_1.setLayout(new BorderLayout(0, 0)); JButton JButtonstop = new JButton(" 停止 "); JButtonstop.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if ( th != null ){ th = null; } } }); panel_1.add(JButtonstop, BorderLayout.CENTER); JPanel panel = new JPanel(); contentPane.add(panel); panel.setLayout(new BorderLayout(0, 0)); JButton btnNewButton_2 = new JButton("New button"); panel.add(btnNewButton_2, BorderLayout.CENTER); } @Override public void run() { //TODO 自動生成されたメソッド・スタブ int i; while ( th != null ){ i = Integer.parseInt( textField.getText() ); try { Thread.sleep(10000); if ( th == null ) break; } catch ( InterruptedException e ){ break; } textField.setText( Integer.toString( i + 1 ) ); } } }

  • JavaでJTableの行の追加方法について

    今、Javaの勉強をEclopse3.2で勉強している者ですが、 JTableにてEnterを押したら次の行が追加されるという、 プログラムを作りたいのですが、どうしたら良いでしょうか? 自分はaddRow()を使ってみたのですが、うまく動きませんでした。 何が動かない原因なのかわかりません。 わかる人よろしくお願いします。 他のやり方も教えてください。 private JTable getJTable2() { int po =1; if (jTable == null) { model = new DefaultTableModel(po,2); jTable = new JTable(model); jTable.addKeyListener(new java.awt.event.KeyAdapter() { private int po; public void keyPressed(java.awt.event.KeyEvent e) { System.out.println("keyPressed()"); // TODO Auto-generated Event stub keyPressed() public addRow() String[] data = { "A5", "B5" }; jTable.addRow(data); System.out.println("po="+this.po); po += 1; System.out.println("po="+po); jTable.setValueAt("aikai",po,1); return; } });

    • ベストアンサー
    • 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); } }

  • 2列目を右寄せにしたい

    今JAVAを勉強しているのですが、 下記のソース上でどうしても 列の右寄せができません。 リファレンスの調べ方が下手なのかもしれませんが わかる方宜しくお願いします。 ---------------------------------------------- import java.awt.*; import javax.swing.*; public class Sample3 extends JApplet { private JLabel lb; private JTable tb; private JScrollPane sp; public void init() { //コンテンツペインの取得 Container cnt = getContentPane(); String colname[] = {"車名","価格","月日"}; String data[][] = { {"乗用車","1200円","10-01"}, {"トラック","2400円","10-05"}, }; //コンポーネントの作成 lb = new JLabel("いらっしゃいませ"); tb = new JTable(data,colname); sp = new JScrollPane(tb); //コンテナへ追加 cnt.add(lb,BorderLayout.NORTH); cnt.add(sp,BorderLayout.CENTER); } } -------------------------------------------------

    • ベストアンサー
    • Java