Java 在JTable中居中文本
我的JTable有问题。我试着像这样将文本居中:Java 在JTable中居中文本,java,swing,jtable,alignment,Java,Swing,Jtable,Alignment,我的JTable有问题。我试着像这样将文本居中: DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer(); centerRenderer.setHorizontalAlignment( JLabel.CENTER ); table.setDefaultRenderer(String.class, centerRenderer); table.setDefaultRenderer(Integer.class,
DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
centerRenderer.setHorizontalAlignment( JLabel.CENTER );
table.setDefaultRenderer(String.class, centerRenderer);
table.setDefaultRenderer(Integer.class, centerRenderer);
第一次它工作了,但后来我把我的程序做大了,然后它就不工作了。我在JPane中有JTable,它在JTabbedPane中。
我在JTabbedPane中看到了一些其他JPanes,它们也与其他JTable一起使用
我的问题是,是否有任何方法可以将文本放在单元格的中心。必须在
TableModel
中明确指定列类型。如果使用的是DefaultTableModel
,则getColumnClass
方法返回的默认类型为type Object,并且由于DefaultTableCellRenderer
类使用JLabel渲染单元格,因此此类型保留默认对齐方式
您可以设置每个列的类型,或者通过更改getColumnClass
方法让java识别类型:
@Override
public Class<?> getColumnClass(int column) {
System.out.println(getValueAt(0, column).getClass());
return getValueAt(0, column).getClass();
}
请参见以下示例:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.time.LocalDate;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
public class JTableCreatingDemo extends JFrame {
public void createAndShowGUI() {
Object columnNames[] = { "String-Column", "Number-Column", "Date-Column", "Boolean-Column" };
Object rowData[][] = { { "some text", 89, LocalDate.now(), new Boolean(true) },
{ "other text", 546, LocalDate.now(), new Boolean(false) } };
JTable table = new JTable(rowData, columnNames) {
@Override
public Class<?> getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
};
DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
centerRenderer.setHorizontalAlignment(JLabel.CENTER);
table.getColumnModel().getColumn(0).setCellRenderer(centerRenderer);
table.getColumnModel().getColumn(1).setCellRenderer(centerRenderer);
JScrollPane scrollPane = new JScrollPane(table);
this.add(scrollPane, BorderLayout.CENTER);
this.setSize(350, 150);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String args[]) throws IllegalAccessException {
EventQueue.invokeLater(() -> new JTableCreatingDemo().createAndShowGUI());
}
}
导入java.awt.BorderLayout;
导入java.awt.EventQueue;
导入java.time.LocalDate;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.table.DefaultTableCellRenderer;
公共类JTableCreatingDemo扩展了JFrame{
public void createAndShowGUI(){
对象列名[]={“字符串列”、“数字列”、“日期列”、“布尔列”};
对象行数据[][]={{“某些文本”,89,LocalDate.now(),新布尔值(true)},
{“其他文本”,546,LocalDate.now(),新布尔值(false)};
JTable table=新的JTable(行数据、列名称){
@凌驾
公共类getColumnClass(int列){
返回getValueAt(0,列).getClass();
}
};
DefaultTableCellRenderer centerRenderer=新的DefaultTableCellRenderer();
centerRenderer.setHorizontalAlignment(JLabel.CENTER);
table.getColumnModel().getColumn(0).setCellRenderer(centerRenderer);
table.getColumnModel().getColumn(1).setCellRenderer(centerRenderer);
JScrollPane scrollPane=新的JScrollPane(表);
添加(滚动窗格,BorderLayout.CENTER);
这个。设置大小(350150);
此.setLocationRelativeTo(空);
此.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
此.setVisible(true);
}
公共静态void main(字符串args[])引发IllegalAccessException{
invokeLater(()->new JTableCreatingDemo().createAndShowGUI());
}
}
见作品:
必须在
表格模型中明确指定列类型。如果使用的是DefaultTableModel
,则getColumnClass
方法返回的默认类型为type Object,并且由于DefaultTableCellRenderer
类使用JLabel渲染单元格,因此此类型保留默认对齐方式
您可以设置每个列的类型,或者通过更改getColumnClass
方法让java识别类型:
@Override
public Class<?> getColumnClass(int column) {
System.out.println(getValueAt(0, column).getClass());
return getValueAt(0, column).getClass();
}
请参见以下示例:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.time.LocalDate;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
public class JTableCreatingDemo extends JFrame {
public void createAndShowGUI() {
Object columnNames[] = { "String-Column", "Number-Column", "Date-Column", "Boolean-Column" };
Object rowData[][] = { { "some text", 89, LocalDate.now(), new Boolean(true) },
{ "other text", 546, LocalDate.now(), new Boolean(false) } };
JTable table = new JTable(rowData, columnNames) {
@Override
public Class<?> getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
};
DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
centerRenderer.setHorizontalAlignment(JLabel.CENTER);
table.getColumnModel().getColumn(0).setCellRenderer(centerRenderer);
table.getColumnModel().getColumn(1).setCellRenderer(centerRenderer);
JScrollPane scrollPane = new JScrollPane(table);
this.add(scrollPane, BorderLayout.CENTER);
this.setSize(350, 150);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String args[]) throws IllegalAccessException {
EventQueue.invokeLater(() -> new JTableCreatingDemo().createAndShowGUI());
}
}
导入java.awt.BorderLayout;
导入java.awt.EventQueue;
导入java.time.LocalDate;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.table.DefaultTableCellRenderer;
公共类JTableCreatingDemo扩展了JFrame{
public void createAndShowGUI(){
对象列名[]={“字符串列”、“数字列”、“日期列”、“布尔列”};
对象行数据[][]={{“某些文本”,89,LocalDate.now(),新布尔值(true)},
{“其他文本”,546,LocalDate.now(),新布尔值(false)};
JTable table=新的JTable(行数据、列名称){
@凌驾
公共类getColumnClass(int列){
返回getValueAt(0,列).getClass();
}
};
DefaultTableCellRenderer centerRenderer=新的DefaultTableCellRenderer();
centerRenderer.setHorizontalAlignment(JLabel.CENTER);
table.getColumnModel().getColumn(0).setCellRenderer(centerRenderer);
table.getColumnModel().getColumn(1).setCellRenderer(centerRenderer);
JScrollPane scrollPane=新的JScrollPane(表);
添加(滚动窗格,BorderLayout.CENTER);
这个。设置大小(350150);
此.setLocationRelativeTo(空);
此.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
此.setVisible(true);
}
公共静态void main(字符串args[])引发IllegalAccessException{
invokeLater(()->new JTableCreatingDemo().createAndShowGUI());
}
}
见作品: