Java 如何在JTable单元格中集中一个值?
如何在Java 如何在JTable单元格中集中一个值?,java,swing,jtable,Java,Swing,Jtable,如何在JTable单元格中居中设置值?我正在使用Netbeans。您需要自定义渲染器。要使第一列居中,可以执行以下操作: DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer(); centerRenderer.setHorizontalAlignment( JLabel.CENTER ); table.getColumnModel().getColumn(0).setCellRenderer( center
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);
要使用字符串数据将所有列居中,可以执行以下操作:
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);
另一种使所有列居中的好方法是使用循环:
for(int x=0;x<numberofcols;x++){
table1.getColumnModel().getColumn(x).setCellRenderer( centerRenderer );
}
对于(int x=0;x而不是JLabel.CENTER
,您可以使用SwingConstants.CENTER
我遇到了类似的问题。我希望根据另一个单元格的值对齐单个单元格。如果单元格x为空,则单元格Y应右对齐。否则,单元格Y应左对齐
我发现这个解决方案非常有用。它包括创建自定义渲染,扩展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);
希望有用!给你:
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);
}
}
}
此代码以jtable为中心
DefaultTableCellRenderer rendar = new DefaultTableCellRenderer();
rendar.setHorizontalAlignment(jLabel1.CENTER);
jTable1.getColumnModel().getColumn(0).setCellRenderer(rendar);
此代码指向列中心您必须在单元格内使用其他组件,例如JLabel,以便它具有对齐属性。这对我不起作用。JLabel.RIGHT对齐右,JLabel.LEFT对齐左,但如果我使用JLabel.center,它将再次向右对齐。为什么会这样?@nawara,JTableHeader有自己的渲染器。尽管它是一个旧帖子,但还是应该更好。你应该使用SwingConstants.CENTER
而不是JLabel.CENTER
。虽然,JLabel.CENTER'也指的是SwingConstants.CENTER,但使用泛型常量类要简洁得多,而不是JLabel`在这种情况下是断章取义的。为什么不((DefaultTableCellRenderer)table.getDefaultRenderer(String.class)).setHorizontalAlignment(SwingConstants.CENTER);
可以代替你的第二段代码吗?--我已经试过了,它不起作用,我不知道为什么。没有错误,它只是保持不居中。在我看来,这一行应该可以工作。当然,你的代码可以工作。@Ironluca如果数据在TableModel中-所有数据都在TableModel中。getColumnClass(…)的默认实现默认TableModel的
方法只返回Object.class,因此您是正确的。但是,标准做法是重写getColumnClass(…)
方法以返回正确的列类,以便可以使用适当的呈现器。这完全相同;-)