如何中心细胞的JTable [英] How to center cells in JTable

查看:297
本文介绍了如何中心细胞的JTable的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个具体的问题,我的code。

I'm having an specific problem with my code.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.*;
import java.awt.Color;

class ver_his_sign extends JFrame {

    ver_his_sign() {

        JTable table = new JTable();
        JScrollPane scroll = new JScrollPane();

        DefaultTableModel model = new DefaultTableModel(get_data(), get_header());

        JFrame hk = new JFrame("Historial de Significados");
        Image icon = Toolkit.getDefaultToolkit().getImage("JLPT.jpg");
        ImageIcon ima = new ImageIcon("JLPT.jpg");
        table = new JTable(model) {
            public boolean isCellEditable(int row, int col) {
                switch (col) {
                    case 0:
                        return false;
                    case 1:
                        return false;
                    case 2:
                        return true;
                    default:
                        return false;
                }
            }

            @Override
            public Class getColumnClass(int column) {
                switch (column) {
                    case 0:
                        return String.class;
                    case 1:
                        return String.class;
                    case 2:
                        return Boolean.class;
                    default:
                        return Boolean.class;
                }
            }
        };
        table.setFont(new Font("Microsoft JhengHei", Font.BOLD, 13)); // a custom renderer which uses a special font
        DefaultTableCellRenderer r = new DefaultTableCellRenderer() {
            Font font = new Font("Microsoft JhengHei", Font.BOLD, 50);

            @Override
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                setFont(font);
                setForeground(Color.blue);
                return this;
            }
        };
        table.getColumnModel().getColumn(0).setCellRenderer(r);
        TableColumn column = null;
        DefaultTableCellRenderer tcr = new DefaultTableCellRenderer();
        tcr.setHorizontalAlignment(JLabel.CENTER);
        DefaultTableCellRenderer defaultRenderer = (DefaultTableCellRenderer) table.getDefaultRenderer(Object.class);
        defaultRenderer.setHorizontalAlignment(JLabel.CENTER);
        defaultRenderer.setFont(new Font("Microsoft JhengHei", Font.BOLD, 50));
        tcr.setFont(new Font("Microsoft JhengHei", Font.BOLD, 50));
        for (int i = 0; i < 3; i++) {
            column = table.getColumnModel().getColumn(i);
            if (i == 0) {
                column.setPreferredWidth(200);
            } else {
                if (i == 1) {
                    column.setPreferredWidth(100);
                } else {
                    column.setPreferredWidth(300);
                }
            }
        }
        table.setRowHeight(table.getRowHeight() + 70);
        table.setModel(model);
        scroll.add(table);
        this.add(scroll);
        this.setTitle("Historial de Significados");
        this.setSize(1350, 700);
        this.setIconImage(icon);
        this.setVisible(true);
        this.setLocationRelativeTo(null);

        scroll.setViewportView(table);
    }

    Object[][] get_data() {
        Object data[][] = new Object[][]{
            {"Uno, 1", "\u4e00", true},
            {"Uno, 1", "\u4e01", true},
            {"Uno, 1", "\u4e02", true},
            {"Uno, 1", "\u4e03", true},
            {"Uno, 1", "\u4e04", true}
        };
        return data;
    }

    String[] get_header() {
        String header[] = new String[]{"KANJI", "SIGNIFICADO", "Agregar"};
        return header;
    }
}

然后发生的事情出现在图像上。我需要汉字的列是居中对齐,但由于某些原因 DefaultTableCellRenderer ,`TCR,不能正常工作,因为它应该是,但默认渲染是做什么的,因为它被认为是

Then it happens what appears on the image. I need Kanji column to be CENTER alignment, but for some reason DefaultTableCellRenderer, `tcr, is not working as it is supposed to be, but the default renderer is doing it as it is supposed to be.

任何建议/帮助?

推荐答案

我已经缩减你的榜样下到要领:

I've pared your example down to the essentials:

  • 您自定义渲染,研究,应调理对齐,以及大小和颜色。

  • Your custom renderer, r, should condition the alignment, as well as size and color.

覆盖模型方法的模式,而不是在视图中。

Override model methods in the model, not in the view.

的Swing GUI对象应当建立和操作的只有的上的事件调度线程

Swing GUI objects should be constructed and manipulated only on the event dispatch thread.

使用的deriveFont()的要求。

另见href="http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#editrender">如何选择本教程节

See also this tutorial section on how renderers are selected.

import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.*;
import java.awt.Color;
import javax.swing.JLabel;

class ver_his_sign extends JFrame {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new ver_his_sign();
            }
        });
    }

    ver_his_sign() {

        DefaultTableModel model = new DefaultTableModel(get_data(), get_header()) {
            @Override
            public boolean isCellEditable(int row, int col) {
                switch (col) {
                    case 0:
                        return false;
                    case 1:
                        return false;
                    case 2:
                        return true;
                    default:
                        return false;
                }
            }

            @Override
            public Class getColumnClass(int column) {
                switch (column) {
                    case 0:
                        return String.class;
                    case 1:
                        return String.class;
                    case 2:
                        return Boolean.class;
                    default:
                        return Boolean.class;
                }
            }
        };
        DefaultTableCellRenderer r = new 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);
                setForeground(Color.blue);
                setHorizontalAlignment(JLabel.CENTER);
                setFont(getFont().deriveFont(50f));
                return this;
            }
        };
        JTable table = new JTable(model);
        table.setRowHeight(table.getRowHeight() + 50);
        table.getColumnModel().getColumn(1).setCellRenderer(r);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.add(new JScrollPane(table));
        this.pack();
        this.setLocationRelativeTo(null);
        this.setVisible(true);
    }

    Object[][] get_data() {
        Object data[][] = new Object[][]{
            {"Uno, 1", "\u4e00", true},
            {"Uno, 1", "\u4e01", true},
            {"Uno, 1", "\u4e02", true},
            {"Uno, 1", "\u4e03", true},
            {"Uno, 1", "\u4e04", true}
        };
        return data;
    }

    String[] get_header() {
        String header[] = new String[]{"SIGNIFICADO", "KANJI", "Agregar"};
        return header;
    }
}

这篇关于如何中心细胞的JTable的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆