2010-01-15 45 views
8

是否可以在JTable單元格內添加按鈕以及數據? 我想要做的是創建一個表格,其中顯示數據庫中的數據(數字)和兩個按鈕來增加/減少同一單元格內的數字。在JTable的單元格內添加按鈕以及數據?

| ID |產品數量|
| 06 | 2 [+] [ - ] |

它會是這樣的如上[+] [ - ]是按鈕。所以當我按[+]時,如果按[ - ],數字將變爲3和1。

回答

15

是的,這是可能的,雖然這並不容易。

你必須寫自己的定製cell renderer和你自己的cell editor

這是一個示例我在5分鐘內做:

sample

它遠非完美,但顯示的概念。

這裏的源代碼:

import java.awt.Component; 
import java.awt.Font; 
import javax.swing.*; 
import javax.swing.table.*; 
import java.awt.Dimension; 

public class CustomCell { 
    public static void main(String [] args) { 
     Object [] columnNames = new Object[]{ "Id", "Quantity" }; 
     Object [][] data  = new Object[][]{ {"06", 1}, {"08", 2} }; 

     JTable table = new JTable(data, columnNames) { 
      public TableCellRenderer getCellRenderer(int row, int column) { 
       return new PlusMinusCellRenderer(); 
      } 
     }; 

     table.setRowHeight(32); 
     showFrame(table); 
    } 

    private static void showFrame(JTable table) { 
     JFrame f = new JFrame("Custom Cell Renderer sample"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(new JScrollPane(table)); 
     f.pack(); 
     f.setVisible(true); 
    } 
} 

class PlusMinusCellRenderer extends JPanel implements TableCellRenderer { 
     public Component getTableCellRendererComponent(
          final JTable table, Object value, 
          boolean isSelected, boolean hasFocus, 
          int row, int column) { 
       this.add(new JTextField(value.toString() )); 
       this.add(new JButton("+")); 
       this.add(new JButton("-")); 
       return this; 
     } 
} 

這裏有可能是interestinghere一個線程。

+1

是否可以添加actionListeners到這些按鈕? – cp101020304 2015-08-22 05:46:23

+0

這些按鈕實際上不可點擊;我必須添加我自己的MouseListener或類似的東西來實現這個功能嗎? – ricky3350 2015-12-11 01:29:30

1

我認爲你需要創建一個自定義單元格渲染器,如果你想顯示什麼比在單元格中的文本(或數字)人。單元格渲染器的工作是繪製任何需要在單元格中顯示的內容。

請參閱Table Renderer documentation

因此,在這種情況下,你可以創建一個小JPane其中包含文本字段和微小的+和 - 按鈕 - 或者只是一個JSpinner的組成部分,如果確實需要的東西。有點棘手,當然,但應該是可能的。

1

作爲討論的tutorial您必須同時渲染顯示你的價值,並編輯從細胞被編輯發現事件。在此example中,ComponentJCheckBox。請注意,這需要延伸AbstractTableModel的定製DataModel爲給定列提供正確的Class。 Joonas建議使用JSpinner是一個很好的方法。

相關問題