簡體   English   中英

在自定義JTable的行標題中創建新行

[英]Create new line in row header of my custom JTable

我在自定義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);
    }

}

但是我需要文本"Cod Type\\nGroup"創建一個新的行標題,如下圖:


附言:請注意文本居中。

在此處輸入圖片說明

謝謝

您可以像這樣使用HTML

visibleColumns.add("<html><center>Cod Type<br>Group");
visibleColumns.add("Name");

在此處輸入圖片說明

並且還要看看布局管理器,因為swing設計用於使用它們而不是null layouts

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM