JTable
セルの値を中央に配置する方法は? Netbeansを使用しています。
レンダラーをカスタマイズする必要があります。最初の列を中央に配置するには:
DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
centerRenderer.setHorizontalAlignment( JLabel.CENTER );
table.getColumnModel().getColumn(0).setCellRenderer( centerRenderer );
すべての列を文字列データで中央揃えにするには、次のようにします。
DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
centerRenderer.setHorizontalAlignment( JLabel.CENTER );
table.setDefaultRenderer(String.class, centerRenderer);
すべての列を中央に配置するもう1つの良い方法は、ループを使用することです。
for(int x=0;x<numberofcols;x++){
table1.getColumnModel().getColumn(x).setCellRenderer( centerRenderer );
}
どうぞ:
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableModel;
public class JTableUtilities
{
public static void setCellsAlignment(JTable table, int alignment)
{
DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(alignment);
TableModel tableModel = table.getModel();
for (int columnIndex = 0; columnIndex < tableModel.getColumnCount(); columnIndex++)
{
table.getColumnModel().getColumn(columnIndex).setCellRenderer(rightRenderer);
}
}
}
使用法:
JTableUtilities.setCellsAlignment(table, SwingConstants.CENTER);
の代わりに JLabel.CENTER
、使用できますSwingConstants.CENTER
。
((DefaultTableCellRenderer) jTable1.getTableHeader().getDefaultRenderer())
.setHorizontalAlignment(JLabel.CENTER); // header to center
このコードヘッダーセンターjtable
DefaultTableCellRenderer rendar = new DefaultTableCellRenderer();
rendar.setHorizontalAlignment(jLabel1.CENTER);
jTable1.getColumnModel().getColumn(0).setCellRenderer(rendar);
このコードを列の中心に
同様の問題がありました。別のセルの値に応じて、単一のセルを揃えたいと思いました。セルXがNULLの場合、セルYは右揃えにする必要があります。そうでない場合、セルYは左揃えにする必要があります。
私はこの解決策が本当に役立つことを発見しました。 DefaultTableCellRenderを拡張するカスタムRenderの作成で構成されます。
コードは次のとおりです。
public class MyRender extends DefaultTableCellRenderer{
@Override
public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column){
super.getTableCellRendererComponent (table, value, isSelected, hasFocus, row, column);
MyTableModel mtm = (MyTableModel)table.getModel();
switch(column){
case Y :
if(mla.getValueAt(row,X)!=null)
setHorizontalAlignment(SwingConstants.RIGHT);
else
setHorizontalAlignment(SwingConstants.LEFT);
break;
}
return this;
}
}
その後、MyRenderの新しいインスタンスを作成し、この場合、列Yに設定します。これは、テーブルに情報を読み込むときに行います。
MyRender render = new MyRender();
table.getColumnModel().getColumn(Y).setCellRender(render);
役に立てば幸いです!