Java 在自定义JTable的行标题中创建新行

Java 在自定义JTable的行标题中创建新行,java,swing,jtable,rowheader,Java,Swing,Jtable,Rowheader,我在自定义JTable的行标题中放置行时遇到一些问题 我使用以下代码创建此JTable: import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Panel; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; import java.ut

我在自定义JTable的行标题中放置行时遇到一些问题

我使用以下代码创建此JTable:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Panel;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.util.ArrayList;
import java.util.List;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.border.BevelBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;


public class Form {

    public static void main(String[] args) {
        JFrame frame = new JFrame();

        List<String> visibleColumns = new ArrayList<String>();

        // THIS COLUMN NEED TO BE IN 2 LINES
        visibleColumns.add("Cod Type\nGroup");
        visibleColumns.add("Name");

        DefaultTableModel tableModel = new DefaultTableModel(visibleColumns.toArray(),5);
        JTable table = new JTable(tableModel);

        Panel panel = new Panel();
        panel.setBounds(5, 5, 352, 232);
        panel.setLayout(new BorderLayout());
        panel.add(table, BorderLayout.CENTER);
        panel.add(table.getTableHeader(), BorderLayout.NORTH);

        // Set Row Header
        JScrollPane scroll = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

        // Set Column Header
        JPanel columnHeader = new JPanel() {
            @Override
            public Dimension getPreferredSize() {
                JScrollBar sb = new JScrollBar(JScrollBar.VERTICAL);
                return new Dimension(sb.getPreferredSize().width, 10);
            }
        };
        scroll.setRowHeaderView(columnHeader);

        // Set 3D effects to scroll pane
        JPanel left = new JPanel();
        left.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
        scroll.setCorner(ScrollPaneConstants.UPPER_LEFT_CORNER, left);
        JPanel right = new JPanel();
        right.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
        scroll.setCorner(ScrollPaneConstants.UPPER_RIGHT_CORNER, right);

        panel.add(scroll, BorderLayout.CENTER);

        //Setting column size
        TableColumnModel tcm = table.getColumnModel();

        tcm.getColumn(0).setMaxWidth(Integer.MAX_VALUE);
        tcm.getColumn(0).setWidth(73);
        tcm.getColumn(0).setPreferredWidth(73);

        tcm.getColumn(1).setMaxWidth(Integer.MAX_VALUE);
        tcm.getColumn(1).setWidth(222);
        tcm.getColumn(1).setPreferredWidth(222);

        frame.add(panel);
        frame.setSize(350, 180);
        frame.setVisible(true);
    }

}

导入java.awt.BorderLayout;
导入java.awt.Dimension;
导入java.awt.Panel;
导入java.awt.Toolkit;
导入java.awt.datatransfer.Clipboard;
导入java.awt.datatransfer.StringSelection;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.BorderFactory;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JScrollBar;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.ScrollPaneConstants;
导入javax.swing.border.BevelBorder;
导入javax.swing.table.DefaultTableModel;
导入javax.swing.table.TableColumnModel;
公开课表格{
公共静态void main(字符串[]args){
JFrame=新JFrame();
List visibleColumns=新建ArrayList();
//此列需要分为两行
visibleColumns.add(“Cod类型\n组”);
可见列。添加(“名称”);
DefaultTableModel tableModel=新的DefaultTableModel(visibleColumns.toArray(),5);
JTable table=新的JTable(tableModel);
面板=新面板();
面板.立根(5,5,352,232);
panel.setLayout(新的BorderLayout());
面板.添加(表格,边框布局.中心);
panel.add(table.getTableHeader(),BorderLayout.NORTH);
//设置行标题
JScrollPane scroll=新的JScrollPane(表格,JScrollPane.VERTIONAL\U SCROLLBAR\U根据需要,JScrollPane.HORIONAL\U SCROLLBAR\U根据需要);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
//设置列标题
JPanel columnHeader=新的JPanel(){
@凌驾
公共维度getPreferredSize(){
JScrollBar sb=新的JScrollBar(JScrollBar.VERTICAL);
返回新维度(sb.getPreferredSize().width,10);
}
};
scroll.setRowHeaderView(columnHeader);
//将3D效果设置为滚动窗格
JPanel left=新的JPanel();
left.setboorder(BorderFactory.createBevelOrder(BevelOrder.downed));
scroll.setCorner(ScrollPaneConstants.UPPER\u LEFT\u CORNER,LEFT);
JPanel right=新的JPanel();
右.setBordOrder(BorderFactory.createBevelOrder(BevelOrder.LOWERED));
scroll.setCorner(ScrollPaneConstants.UPPER\u RIGHT\u CORNER,RIGHT);
panel.add(滚动、边框布局、居中);
//设置列大小
TableColumnModel tcm=table.getColumnModel();
tcm.getColumn(0).setMaxWidth(整数.MAX_值);
tcm.getColumn(0)、setWidth(73);
tcm.getColumn(0).setPreferredWidth(73);
tcm.getColumn(1).setMaxWidth(整数.MAX_值);
tcm.getColumn(1)、setWidth(222);
tcm.getColumn(1).setPreferredWidth(222);
框架。添加(面板);
框架。设置尺寸(350、180);
frame.setVisible(true);
}
}
但是我需要文本
“Cod Type\n组”
创建一个新行行标题,如下图所示:


Ps:注意文本居中


谢谢

您可以像这样使用
HTML

visibleColumns.add("<html><center>Cod Type<br>Group");
visibleColumns.add("Name");
visibleColumns.add(“Cod类型
组”); 可见列。添加(“名称”);


另外请看一看,因为
swing
设计用于使用它们,而不是
null布局

您可以像这样使用
HTML

visibleColumns.add("<html><center>Cod Type<br>Group");
visibleColumns.add("Name");
visibleColumns.add(“Cod类型
组”); 可见列。添加(“名称”);


另外,请看一看,因为
swing
设计用于使用它们,而不是
null布局

也避免使用
null布局
而不是查看
我尝试了一些代码,但不起作用。
什么不起作用?也许我可以使用和
但我尝试使用它们,但不起作用。文本未居中且不适合标题。也避免使用
Null布局
,而是查看
我尝试了一些代码,但不起作用。
什么不起作用?也许我可以使用和
但我尝试使用,但不起作用。文本未居中且不适合标题。