web-dev-qa-db-ja.com

JTableセルに値を中央に配置する方法は?

JTableセルの値を中央に配置する方法は? Netbeansを使用しています。

27
Daniel Pereira

レンダラーをカスタマイズする必要があります。最初の列を中央に配置するには:

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);
53
camickr

すべての列を中央に配置するもう1つの良い方法は、ループを使用することです。

 for(int x=0;x<numberofcols;x++){
         table1.getColumnModel().getColumn(x).setCellRenderer( centerRenderer );
        }
7

どうぞ:

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);
4
BullyWiiPlaza

の代わりに JLabel.CENTER、使用できますSwingConstants.CENTER

2
leejsmith1991
((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); 

このコードを列の中心に

1
Shinwar ismail

同様の問題がありました。別のセルの値に応じて、単一のセルを揃えたいと思いました。セル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);

役に立てば幸いです!

1
jUNT