電子書籍の厳選無料作品が豊富!

 よろしくおねがいいたします。
質問なのですが、JTableのカラム幅を動的に変えるに
はどうすれば良いのでしょうか? 
 例えばアプリケーションの画面内で、あるボタンを
押すといくつかあるカラムの内の1つのカラムサイズ
を"0"にし、またボタンを押すと元のサイズに戻す。
といったような処理がしたいのですが、、、
バージョンはj2sdk1.4.2_06です。 どなたか分る方が
おられましたらよろしくお願いします。

A 回答 (4件)

簡単なサンプルを作ってみたんで、参考にしてみてください。




import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;

public class ResiseTable extends JFrame implements ActionListener{
JTable table;
JTextField jtf;
final String resize="サイズ変更";

String[][] rowData = {
{"1","阪神","48","28","19","1",".596","-"},
{"2","巨人","50","28","20","2",".583","0.5"},
{"3","中日","47","26","20","1",".565","1"},
{"4","ヤクルト","48","25","23","0",".521","2"},
{"5","広島","49","20","27","2",".426","4.5"},
{"6","横浜","50","15","33","2",".313","5.5"},
};

String[] columnNames = {"順位","チーム","試合数","勝","負","分","勝率","ゲーム差"};

DefaultTableModel model;
int actCount = 0;

public static void main(String[] args){
/* コンストラクタ */
ResiseTable test = new ResiseTable();

/* 終了処理を追加 */
test.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){System.exit(0);}
});

/* サイズと位置を指定 */
test.setBoundsToCenter(500, 200);

/* 実際に表示する */
test.setVisible(true);
}

ResiseTable(){
JPanel p1 = new JPanel();
model = new DefaultTableModel(rowData, columnNames);
table= new JTable(model);

JScrollPane scrPane = new JScrollPane();
scrPane.getViewport().setView(table);
scrPane.setPreferredSize(new Dimension(450, 115));
p1.add(scrPane);

Container content = this.getContentPane();
content.add(p1, BorderLayout.CENTER);

JPanel p2 = new JPanel();
jtf=new JTextField("0",5);
jtf.setHorizontalAlignment(JTextField.RIGHT);
p2.add(jtf);
JButton smallButton = new JButton(resize);
smallButton.addActionListener(this);
p2.add(smallButton);
content.add(p2, BorderLayout.SOUTH);
}

void setBoundsToCenter(int width,int height)
{
Dimension screen_dim = getToolkit().getScreenSize();
setBounds((int)((screen_dim.getWidth()-width)/2),(int)((screen_dim.getHeight()-height)/2),width,height);
}

public void actionPerformed(ActionEvent ae){
try
{
int size=Integer.parseInt(jtf.getText());
TableColumnModel tcm=table.getColumnModel();
int selectedColumn=table.getSelectedColumn();
if(selectedColumn>=0)
{
TableColumn tc=tcm.getColumn(selectedColumn);
tc.setPreferredWidth(size);
}
}
catch(Exception e)
{
}
}
}
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
サンプルを試させて頂いたところ、私のやりたかった
処理を行うことが出来ました。
 どうやらMaxWidthだけでサイズを設定していたのが
いけなかったようです。setPreferredWidthでサイズセ
ットしたらできる様になりました。

どうもありがとうございました。

お礼日時:2006/06/02 09:27

 こんばんは。



 JTableのオートリサイズモードが邪魔をしているのだと思います。

 setAutoResizeModeメソッドでAUTO_RESIZE_OFFに設定し、オートリサイズモードをオフにしてやればいいと思います。

 当然ですが、オートリサイズが利かなくなるので、表の見た目に不満が出るかもしれませんが、しょうがないですね。

 あと、カラムの幅の最小値を0にしておくのもお忘れなく。
    • good
    • 0

うーん、なんででしょう・・・?


カラム幅の変更前と変更後のTableColumn#getMaxWidthとTableColumn#getMinWidthの値は同じでしょうか?

また、TableColumn#getResizableの値はtrueでしょうか?

一回目はサイズ変更できたのであれば、どこかでそれらの値が変更されていると思うのですが・・・

もしくは、カラムサイズを「0」にしたのであれば発想をかえて、TableModelから対象の列を削除してはどうでしょう。
    • good
    • 0

TableColumn#setWidth(int width)


TableColumn#setPrefferedWidth(int prefferedWidth)
でどうでしょうか?

もちろんボタンのActionListener#actionPerformed
で(カラムサイズの)フラグの判定などはしないと
いけないですが・・・
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
 試したところ、ボタンを押した1回目だけはサイズ変更できるのですが、2回以降は何の変化もありませんでした。 単純にサイズの再設定をするだけではだめなようです、、、 

お礼日時:2006/06/01 12:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!