如何在JTable单元中居一个值?

时间:2011-09-15 15:41:39

标签: java swing jtable

如何在JTable单元格中居值?我正在使用Netbeans。

5 个答案:

答案 0 :(得分:51)

您需要自定义渲染器。要使第一列居中,您可以这样做:

DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
centerRenderer.setHorizontalAlignment( JLabel.CENTER );
table.getColumnModel().getColumn(0).setCellRenderer( centerRenderer );

要使用String数据居中所有列,您可以这样做:

DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
centerRenderer.setHorizontalAlignment( JLabel.CENTER );
table.setDefaultRenderer(String.class, centerRenderer);

答案 1 :(得分:7)

使所有列居中的另一个好方法是使用循环:

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

答案 2 :(得分:4)

你走了:

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

答案 3 :(得分:2)

您可以使用JLabel.CENTER

代替SwingConstants.CENTER

答案 4 :(得分:1)

我有类似的问题。我想根据另一个单元格的值对齐单个单元格。如果单元格X为NULL,则单元格Y应该右对齐。否则,单元格Y应该左对齐。

我发现这个解决方案真有帮助。它包括创建自定义Render,扩展DefaultTableCellRender。

以下是代码:

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

希望它有用!