• ベストアンサー

JTableで値を右寄せ表示する方法

やりたい事はJTableのカラム内の値を右寄せにしたいだけです。 APIマニュアルのJTableの項の「How to use table」を読むと、 その方法は、設定する値をObjectではなく、Integerオブジェクトに するだけで、右寄せになるとの事。早速やってみたところ、Integer あるいはFloat(多分Double)オブジェクトでも確かに右寄せになりました。 これはこれでいいのですが、それでは、Stringを右寄せにしたい時は どうするの?という疑問が湧きました。どなたか、ご存知の方いらっしゃいますか? また、そういうメソッドが別にあるのならば教えてください。

  • Vargas
  • お礼率85% (174/204)
  • Java
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • ct27
  • ベストアンサー率62% (48/77)
回答No.1

TableCellRenderer(またはDefaultTableCellRenderer)を使用します。 参考URLをご覧になるとおわかりいただけるかと思い ますが、setHorizontalAlignment()で位置を指定して います。これで好きなように右寄せ/左寄せできますよ。

参考URL:
http://java-house.jp/ml/archive/j-h-b/036862.html#body
Vargas
質問者

お礼

探し方が悪いっていやそうなんですが、 なんでAPIマニュアルにそういう簡単な方法を書いてくれないんですかね。 どう考えても数値オブジェクトだったら勝手に右寄せになるっていうのは もしそれだけしか機能がないのであれば、おかしいですもんね。あそうか、JTableクラスの部分に限っての記載だからか。 Javaって敷居高いですね。助かりましたありがとうございました。

関連するQ&A

  • JTableのあるセルに値を表示する方法

    やりたい事は、あるJTableのあるセルに値を出したいだけなのです。 あるJTable-AについてはsetValueAtを使用して簡単に値を表示する事が 出来たのですが、別のJTable-Bには同じメソッドを使用しても表示されません。 よくよく、確認してみたところ、JTable-BはAbstractTableModelを派生して 独自に作成したクラスMyModelをsetModelしていました。 MyModelクラスの中身にはやはり、空のsetValueAtメソッドが存在していました。 これで、解決と思ったのですが、setValueAtをコメントアウトしても何も 変わりませんでした。次にsetValueAtに super.setValueAt(~)を記述して(上位におまかせのつもり)やってみましたが 何も変わりませんでした。この場合どうすればセルに値が表示される様に なるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • SwingでJtableのヘッダ行が表示されません

    SwingでJtableのヘッダ行が表示されません 解決方法とどうして表示されなかったのか理由もできればお願いします。 import java.util.Vector; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableModel; public class Table_Calendar extends JFrame{ Vector<String>[] data = new Vector[3]; public static void main(String args[]){ new Table_Calendar(); } public Table_Calendar(){ super(); // ウィンドウサイズ this.setSize(800, 600); // レイアウト this.setLayout(null); // ウィンドウクローズ時の処理 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // セルのデータ作成 for (int i = 0; i < 3; i++) { data[i] = new Vector<String>(); } // data[0]に名前、data[1]に住所、data[2]に電話番号 data[0].addElement("鈴木一郎"); data[1].addElement("東京都"); data[2].addElement("xxxxxxxxxx"); // テーブル作成 TableModel tableModel = new AbstractTableModel() { // 行数 public int getRowCount() { return 1; } // 列数 public int getColumnCount() { return 3; } // row行column列の値をセット public Object getValueAt(int row, int column) { return data[column].elementAt(row); } // タイトル部の値をセット public String getColumnName(int column) { switch (column) { case 0: return "名前"; case 1: return "住所"; case 2: return "電話番号"; } return ""; } }; JTable table = new JTable(tableModel); table.setLocation(10, 20); table.setSize(600,500); JPanel panel2 = new JPanel(); panel2.setLayout(null); panel2.add(table); /*setBounds(int x,int y,int width,int height)*/ panel2.setBounds(10, 10, 700,700); this.add(panel2); this.setVisible(true); } }

    • ベストアンサー
    • 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
  • JTable ArrayList 表示されない

    度々質問させて頂いてます。 Jtableでファイルのリストを表示させたいのですが、アプリ外(Windowsのエクスプローラ)からのD&Dしてきたファイルを、最初に要素のない状態で定義したArrayList型の変数?にいれる(addする)ので、はじめはArrayList型変数には知らない(意味を持たない)値が入っているか、JTableが、表示する範囲の要素がなくて困ってしまっているはずです。たぶんそのせいでJTableに表示されないんだと思います。(妄想です) nullで初期化しようとも考えたのですがそうするとaddが使えなくなってしまい(nullが入っているところの後ろからaddされる)、同じ班の人が作ってくれたクラスを手直し?しなくてはなりません。 どうすればいいでしょう。 ちょっと日本語がイカれてますができれば助けて欲しいです。 補足ならいくらでもします。 //TableModelクラス public class TableModel extends AbstractTableModel{ public static DataList mainList = new DataList(); TableModel(){ } @Override public int getColumnCount() { return 4; } @Override public int getRowCount() { return 1; } @Override public String getValueAt(int row, int column) { String fileName = mainList.GetData(row).GetName(); String lastModifiedDate = mainList.GetData(row).GetDate().toString(); String filePath = mainList.GetData(row).GetPath(); switch(column){ case 0: return null; case 1: return fileName; case 2: return lastModifiedDate; case 3: return filePath; default: return null; } } public String getColumnName(int column){ switch(column){ case 0: return null; case 1: return "ファイル名"; case 2: return "更新日時"; case 3: return "パス"; default: return null; } } } //DataListクラス public class DataList{ List<FileData> dataList; public DataList(){ this.dataList = new ArrayList<FileData>(); } // 末尾にデータを追加 public void AddData(FileData fd){ this.dataList.add(fd); } } FileDataクラスは単純にファイル名、パス、更新日時(Date型)を持つクラスです rowが1なのはいろいろ試したからで、実際は30行くらい表示していたいです。

    • ベストアンサー
    • Java
  • Stringの値で型キャストしたい(Java)

    最近OKWaveでお世話になっています。 表現がおかしいかもしれませんが、Stringの変数の値を使って、型キャストしたいです。 様々なオブジェクトが入る配列(Vector)を使用しているため、VectorをObject型にして使用しています。 配列のある要素をget()したのち、getClass().getSimpleName()でクラス名を取得し、そのクラス名を、 Object obj = array.get(i); String name = obj.getClass().getSimpleName(); if(name.equal("Integer")) {  method((Integer)obj);   ・   ・   ・ のような形で、場合分けして、メソッドを呼び出しています。 ですが、この方法だと、条件分岐が増えて、見づらいです。 そこで、クラス名を取得したnameをうまく使ってobjを型キャストしたいです。 これを解決させる方法もしくはヒントを教えてください!

    • ベストアンサー
    • Java
  • JTableのカラム移動の抑止方法

    現在スクロールペイン(JScrollPane)上にテーブル(JTable)を乗せたGUI構成にしております。 そこで質問なのですが、この構成にすると、画面上でカラムの移動が出来ます。 (カラムヘッダー上でクリックし、そのまま左右に動かすと該当位置にカラム全体が移動します) これを抑止したいのですが、そういう事は可能ですか? または、今現在、そのテーブルのカラム背景色はDefaultTableCellRendererから派生させた独自クラス 内のgetTableCellRendererComponentをオーバーライドしたメソッド内で固定的に5列目だったら 赤みたいな処理を行っていますが、これをカラム移動されたイベントを拾って、動的に変更する事 は可能ですか? 現状、たとえば5列目(赤)を1列目などに移動させると当然、背景色は赤ではなくなって しまっています。 仕様的にカラム移動はマストでは無い為、このオペレーション自体の抑止、あるいは動的に背景色 を切り替えるどちらでも方法は構わないと思っております。 以上、よろしくお願いします。

    • ベストアンサー
    • Java
  • フィールドを持たないクラスが、値を保持できる理由

    なぜint型フィールドを持たないMyGenericsクラスが変数やリテラルを保持できるのでしょうか? Objectクラスのフィールドを持っていますが、Objectクラスも、 フィールドは持っていませんよね?メソッドも空のObject()しか持っていないですし。 一応、javadocを読んだのですが、読み方間違えていますか? http://dlc-cdn.sun.com/jdk/jdk-api-localizations/jdk-api-ja/builds/latest/html/ja/api/index.html --------------------code-------------------------------- public class MyGenericsTest { public static void main(String[] args) { int x = 234; MyGenerics g = new MyGenerics(x); Integer i = (Integer)g.get(); System.out.println(i); } } class MyGenerics { Object o; public MyGenerics(Object o){ this.o = o; } public Object get(){ return o; } }

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

    swingなのですが下記のプログラムで実現できない点があります。 1.isCellEditableメソッドを使ってセルを編集可能にしたのですが 編集した文字が消えてしまいます。 2.また、ボタンを配置してボタンを押下時に編集したセルの   行のデータをコンソールに表示したいのですがどうすればいいかわかりません。 3.画面レイアウトがsetLocation(x, y)した位置に表示されません。 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Vector; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableModel; public class JTableSample4 implements ActionListener { static Vector<String>[] data = new Vector[3]; static JFrame frame; public static void main(String[] args) { frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(null); JPanel panel1 = new JPanel(); // セルのデータ作成 for (int i = 0; i < 3; i++) { data[i] = new Vector<String>(); } // data[0]に名前、data[1]に住所、data[2]に電話番号 data[0].addElement("鈴木一郎"); data[1].addElement("東京都"); data[2].addElement("xxxxxxxxxx"); data[0].addElement("佐藤花子"); data[1].addElement("千葉県"); data[2].addElement("yyyyyyyyyy"); data[0].addElement("田中浩二"); data[1].addElement("埼玉県"); data[2].addElement("zzzzzzzzzz"); data[0].addElement("小川伸介"); data[1].addElement("新潟県"); data[2].addElement("aaaaaaa"); data[0].addElement("佐藤和也"); data[1].addElement("群馬県"); data[2].addElement("bbbbbbb"); data[0].addElement("渡辺悟"); data[1].addElement("愛知県"); data[2].addElement("ccccccc"); data[0].addElement("橋本智也"); data[1].addElement("愛媛県"); data[2].addElement("ddddddd"); data[0].addElement("永井祐二"); data[1].addElement("栃木県"); data[2].addElement("eeeeeee"); data[0].addElement("細貝昭二"); data[1].addElement("福岡県"); data[2].addElement("fffffff"); data[0].addElement("堀野友光"); data[1].addElement("長野県"); data[2].addElement("gggggggg"); // テーブル作成 TableModel tableModel = new AbstractTableModel() { // 行数 public int getRowCount() { return 10; } // 列数 public int getColumnCount() { return 3; } // row行column列の値をセット public Object getValueAt(int row, int column) { return data[column].elementAt(row); } // タイトル部の値をセット public String getColumnName(int column) { switch (column) { case 0: return "名前"; case 1: return "住所"; case 2: return "電話番号"; } return ""; } /******************セルの編集 可/不可を操作するメソッド**********************/ public boolean isCellEditable(int rowIndex, int columnIndex) { /*0が1カラム目 1が2カラム目なのでこの場合電話番号だけ編集可*/ if (columnIndex == 0 || columnIndex ==1) { /*falseは編集不可*/ return false; } else /*trueは編集可*/ return true; } }; JLabel label = new JLabel("電話番号だけがセルを編集することができます"); label.setLocation(10, 10); label.setSize(300, 20); JButton button = new JButton("Click Me!"); button.setLocation(10, 400); button.setSize(20, 20); //button.addActionListener(); JTable table = new JTable(tableModel); JScrollPane scrollPane = new JScrollPane(table); scrollPane.setLocation(10, 40); scrollPane.setSize(750, 180); panel1.add(button); panel1.add(label); panel1.add(scrollPane); panel1.setBounds(10, 10, 800, 230); frame.add(panel1); frame.setSize(800, 600); frame.setVisible(true); } public void actionPerformed(ActionEvent e) { System.out.println("test"); } }

    • ベストアンサー
    • Java
  • phpで左辺が変数でイコールを挟んで右辺に入る値を

    phpで左辺が変数でイコールを挟んで右辺に入る値を型と呼びますよね? integer string float bool 等 この画像にある $message = $job.$count.”名募集”; の場合等を何型と呼ぶんでしょうか?

    • ベストアンサー
    • PHP
  • stringの値を、Calendarクラスの「.set」で使用するため

    stringの値を、Calendarクラスの「.set」で使用するためには。 どうしらたいいのでしょうか? Calendarクラスの変数に、「.set」を使用して値を設定したいのですが 設定するための値をPOSTでもっていきていて、srting型にしかなりません。 Integer.valueOf(str).intValue(); Integer.parseInt(str); などを使用して設定できないか、試してみたのですがエラーになってしまいました。 APIのページなども見てみたのですが、初心者なのでいまいち分かりません… こういう場合どう設定すればいいのか、どうぞご教授よろしくお願いいたします。

専門家に質問してみよう