简体   繁体   English

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

[英]How to center in JTable cell a value?

How to center a value in JTable cell?如何在JTable单元格中居中值? I'm using Netbeans.我正在使用 Netbeans。

You need to customize the renderer.您需要自定义渲染器。 To center the first column you can do:要将第一列居中,您可以执行以下操作:

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

To center all columns with String data you can do:要将所有列与字符串数据居中,您可以执行以下操作:

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

Another good way to center all columns is with a loop:另一种将所有列居中的好方法是使用循环:

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

Here you go:干得好:

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

Usage:用法:

JTableUtilities.setCellsAlignment(table, SwingConstants.CENTER);

您可以使用SwingConstants.CENTER代替JLabel.CENTER

I had a similar problem.我有一个类似的问题。 I wanted to align a single cell depending on the value of another cell.我想根据另一个单元格的值对齐单个单元格。 If cell X was NULL, then cell Y should be RIGHT aligned.如果单元格 X 为 NULL,则单元格 Y 应右对齐。 Else, cell Y should be LEFT aligned.否则,单元格 Y 应左对齐。

I found this solution really helpful.我发现这个解决方案真的很有帮助。 It consists on creating a custom Render, extending DefaultTableCellRender.它包括创建自定义渲染,扩展 DefaultTableCellRender。

Here's the code:这是代码:

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

 }

After that, just create a new instance of MyRender and set it to column Y, in this case.之后,只需创建一个 MyRender 的新实例并将其设置为 Y 列,在本例中。 I do this when I load the information on the table.当我加载表格上的信息时,我会这样做。

MyRender render = new MyRender();
table.getColumnModel().getColumn(Y).setCellRender(render);

Hope it's useful!希望有用!

((DefaultTableCellRenderer) jTable1.getTableHeader().getDefaultRenderer())
            .setHorizontalAlignment(JLabel.CENTER); // header to center

This code header center jtable这个代码头中心jtable

DefaultTableCellRenderer rendar = new DefaultTableCellRenderer();
    rendar.setHorizontalAlignment(jLabel1.CENTER);

    jTable1.getColumnModel().getColumn(0).setCellRenderer(rendar); 

this code to column center此代码列中心

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM