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

このQ&Aのポイント
  • JavaでJTableの行を追加する方法について紹介します。
  • JTableにEnterキーを押したら次の行が追加されるプログラムを作成する方法について相談です。
  • addRow()を使って行を追加しようとしましたが、うまく動作しません。他の方法も教えてください。
回答を見る
  • ベストアンサー

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

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

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

> public addRow() この行はコンパイラを通らないでしょう。 せっかくDefaultTableModelを作ったのですから、このクラスのドキュメンテーションをよく読んでみましょう。addRow()も、JTableのメソッドではありませんよ。 また、SwingのコンポーネントはKeyListenerのような低レベルのイベントリスナを使わずに、InputMap/ActionMapの仕組みを使ってください。なぜなら、キーはすでにいろんなところでいろんな目的に使われていることが多いからです(とくに[Enter]キーなんかは)。また、直接低レベルイベントを使うと、ほかの既存のキー機能の邪魔をすることも往々にしてあります。 このページの最後のほうに、InputMap/ActionMapの用例があります: http://homepage1.nifty.com/algafield/javanotes-gui.html

zofiel
質問者

お礼

回答ありがとうございます。 既存のキー機能の邪魔をしないために、 InputMap/ActionMapを使う。勉強になります。 また、質問があった時は、 よろしくお願い致します。

関連する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
  • JavaのjTableに関する質問です

    以下の様にプログラムを書いた所、「jTable3が見つかりません」と出力されました。 for文をつける以前は何も問題なく動いていたいのに、どうしてfor文を付けたことによって、このようなエラーが起きたのでしょうか? private void jButton19MouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here: for(int i=0;i<10;i++) NewJFrame.jTable3.getColumnModel().getColumn(20).setCellRenderer(new MyTableCellRenderer()); } }

    • ベストアンサー
    • 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について

    以下のようにキーボードから入力していくプログラムを試行しているのですが、エラーが出てくるので行き詰まっています。 理想的にはキーボードに”あいう”エンター”えおか”エンターと打ち込んだら str[0]=あいう str[1]=えおか と表示させていきたいのですが、よろしくお願いします。 import java.io.*; import java.lang.*; import java.net.*; import java.awt.*; class gugu2 { public static void main(String[] args) throws IOException { int i=0; while(i<2){ System.out.println("キーワード入力"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine(); char str[] = input.toCharArray(); System.out.println("キーワードは" + str[]); i=i+1; } for(i=0;i<2;i++){ System.out.println(str[]); } } } これがエラー表示です。 gugu2.java:17: '.class' がありません。 System.out.println("キーワードは" + str[]); ^ gugu2.java:21: '.class' がありません。 System.out.println(str[]); ^ エラー 2 個

    • ベストアンサー
    • Java
  • JavaのjTableについて

    JavaのEclipse3.2でアプリケーションの勉強をしているのですが、 わからないことがあります。 i=1 model = new DefaultTableModel( i , 2 ); jTableのセルの表示が、1行2列になっています。 [0,0]=空白 [0,1]=空白 この時、[0,0]に1と入力して、 [0,0]= 1 [0,1]=空白 Enterを押すと2行目がないので、カーソルは[0,1]に移動します。 が、自分はこれを↓ キーボードのEnterを押すことで、 [0,0]= 1 [0,1]=空白 [1,0]= 空白 [1,1]=空白 2行2列の配列とjTableの表示も2行2列に変わる。 カーソルは[1,0]に移動。 また、[1,0]に2を入力。 [0,0]= 1 [0,1]=空白 [1,0]= 2 [1,1]=空白 Enterを押す。 [0,0]= 1 [0,1]=空白 [1,0]= 2 [1,1]=空白 [2,0]= 空白 [2,1]=空白 のように表示させたいのですが、どうすれば良いのでしょうか? ※説明下手ですいません。 それとも、 『キーボードのEnterを押す』ていうActionってあるのでしょうか? 以上 ご回答よろしくお願いします。

    • ベストアンサー
    • Java
  • java 入力命令

    以下うまくどうさしません、教えてください。 public class Main { public static void main(String[] args){ System.out.println("名前"); String name = new java.util.Scanner(System.in) .nextLine(); System.out.println("年齢"); int age = new java.util.Scanner(System.in) .nextInt(); System.out.println (age + name); } }

  • JTableのイベント取得方法

    お世話になります JTableにDBからの検索結果を表示させて、そのセルを編集したときに編集したセルに対してアップデート等の処理を行いたいのですが、セルが編集されたときのイベントを取得したいのですがうまくいきません。 具体的なソース等のアドバイスよろしくお願いします。 ---ソース--- TableEditListener lisner = new TableEditListener() tableModel = new AbstractTableModel(vecResult,clmName); tableModel.addTableModelListener(lisner); table = new JTable(tableModel); 内部クラス class TableEditListener implements javax.swing.event.TableModelListener{  public TableEditListener(){ } public void tableChanged(TableModelEvent e){ System.out.println("セルの編集をしました。"); } } 現在以上のようなソースになっています。 よろしくお願いします。

    • ベストアンサー
    • Java
  • javaのプログラムについて

    以下のプログラムを実行するとエラーが起こるのですが原因はなんですか? class Tokuten { private String name; private int eng; private int math; private int sci; public void setData(String n, int e, int m, int s) { if(g>0 && g <1000){ name = n; eng = e; math = m; sci = s; } void show() { System.out.println("受験生の名前は" + name + "です。"); System.out.println("英語は" + eng + "点です。"); System.out.println("数学は" + math + "点です。"); System.out.println("理科は" + sci + "点です。"); } } class TokutenMain { public static void main(String[] args) { Tokuten jukensei = new Tokuten(); jukensei.setData("Hanako",81,67,78); jukensei.show(); } }

  • java

    次のコード中の括弧内で下に示す11通りの各コードを実行した場合の実行画面を正確に答えよ。 class A{ public void func1(){System.out.println("A1");} public void func2(){System.out.println("A2");} } class B extends A{ public void func1(){System.out.println("B");} } class C{ public int x=0, y=1; } class D extends C{ public int x=2; public void func1(int x){System.out.println(x);} public void func2(int x){System.out.println(this.x);} public void func3(int x){System.out.println(super.x);} public void func4(int x){System.out.println(this.y);} public void func5(int x){System.out.println(super.y);} } class E{ public void func1(int n){ try{ System.out.println("E1"); int[] ary=new int[n]; System.out.println("E2"); }catch(NegativeArraySizeException e){ System.out.println("E3"); }finally{ System.out.println("E4"); } } } (1) A a=new A(); a.func1(); (2) A a=new B(); a.func1(); (3) B b=new B(); b.func1(); (4) B b=new B(); b.func2(); (5) D d=new D(); d.func1(3); (6) D d=new D(); d.func2(3); (7) D d=new D(); d.func3(3); (8) D d=new D(); d.func4(3); (9) D d=new D(); d.func5(3); (10) E e=new E(); e.func1(5); (11) E e=new E(); e.func1(-2); (1) A1 (2)B (3)B (4) A2 (5) 3 (6) 2 (7) 0 (8) 1 (9) 1 (10) E1E2E4(11) E1E3E4 と答えになるんですがなぜこうなるのかわかりません。教えてください

    • ベストアンサー
    • Java
  • package sample;

    package sample; import java.applet.*; import java.awt.*; import java.awt.event.*; import java.applet.*; import java.awt.Label; import java.awt.Font; import static java.awt.Font.BOLD; import java.util.*; import java.awt.Graphics; import java.awt.Image; import java.awt.*; import java.io.BufferedWriter; import java.io.*; public class sample extends Panel { // マウス位置 int posX = 150; int posY = 200; // 円直径 int h = 100; int[] xCord1, yCord1, xCord2, yCord2; // 円左上位置 int imgPosX = 0; int imgPosY = 0; // 円中心点から三角頂点までの距離(=円の半径+α) int r = 90; // 円中心点 int imgCenterPosX = imgPosX + h / 2; int imgCenterPosY = imgPosY + h / 2; double s = Math.atan2((posX - imgCenterPosX), (posY - imgCenterPosY)); int x, y; public static void main(String args[]) { try { String str1 = "NUMBER,TITLE"; String str2 = "2,test"; PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter( "C:\\output.csv"))); pw.println(str1); pw.println(str2); System.out.println("ファイルに書き込みました。"); pw.close(); } catch (IOException exp) { System.out.println("入出力エラーです。"); } Frame f = new Frame(); f.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { System.exit(0); }; }); sample ut = new sample(); ut.setSize(100, 100); // same size as defined in the HTML APPLET f.add(ut); f.pack(); ut.init(); f.setSize(100, 100 + 20); // add 20, seems enough for the Frame title, f.show(); }