簡體   English   中英

我可以制作沒有邊框的JTable列嗎?

[英]Can i make a JTable column without borders?

我創建了一個包含JTextArea + A JButton的單元格的列,如下面第3列中的圖片所示:

替代文字

但是在更新該列中的單元格值時,我遇到了很多問題,我的CellRenderer和CellEditor,因為我的代碼有點復雜。 所以我想用2列替換該列。 一列是正常的String單元格 ,另一列是JButton單元格,但這兩列應該與上面圖像中出現的第3列具有相同的外觀。 所以我的問題是

1.如何將2列的標題合並在一起?

2.如何刪除JButtons列的左邊框?

如果這些是固定的,那么2列將具有與上面圖像相同的外觀+更新單元格值將更容易。

--------------------------------編輯:我的代碼示例問題:

好的......你問了。 我的代碼是巨大的,但如果你可以幫助我修復它,那將是完美的。 我為我的問題創建了一個正在運行的jar示例,並包含了我的源代碼。 你可以在這里下載 :

罐子樣品

問題是我使用一個按鈕來允許排序表行(向上/向下移動),但是當我這樣做時,一些移動的單元格值不會更新!

您可以看到以下屏幕截圖: 替代文字 問題出在我正在使用的單元格編輯器中...但我無法修復它。

在創建空表模型時更新UPDATE ,創建ButtonCellRenderer的兩個實例(而不是4),並將一個實例設置為第2列的編輯器和渲染器,第3列設置為第3列。此修復在移動行時顯示錯誤的值,但有時在懸停時繪制空單元格。

關於代碼不工作,每當鼠標移動時重新啟動單元格編輯可能會引入問題,因為您在每次鼠標移動時都在單元格編輯器和渲染器之間切換。 即使您使用JTextArea(應該是JTextField),我也無法編輯任何值。 每次更改行的順序時重新創建表模型都可以,但最好創建一個包含所有列的值的類,並使用這些類的Vector作為表模型。 這樣,您可以重新排序向量中的值,並且將更新表模型。

如果要合並兩個頭,請覆蓋JTableHeader getHeaderRect(int col) ,以返回兩列的super.getHeaderRect()的並集。 您可能還需要覆蓋BasicTableHeaderUI的paint()方法,以在前兩個上繪制寬標題。

這是我用來合並表格單元格的方法,但它也適用於標題。

對不起,我無法給你確切的代碼。 就個人而言,我會編寫自定義單元格渲染器,即您的第一種方法。

編輯如果你想使用金屬LaF,這個代碼有點不繪制第二列的標題:

    final TableCellRenderer defaultRenderer = getTableHeader().getDefaultRenderer();
    getTableHeader().setDefaultRenderer(new DefaultTableCellRenderer() {
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            JLabel c = (JLabel) defaultRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            if (column == 1)
                c.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 0, Color.gray));
            else if (column == 2) {
                c.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 1, Color.gray));
                c.setText(null);
            } else
                c.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.gray));
            return c;
        }
    });

您可以創建一個沒有邊框(空邊框)的JButton來實現TableCellRenderer嗎?

暫無
暫無

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

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