Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JTable中居中文本_Java_Swing_Jtable_Alignment - Fatal编程技术网

Java 在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,

我的JTable有问题。我试着像这样将文本居中:

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());
}
}
见作品: