2010-01-15 19 views
8

क्या डेटा के साथ जेटीबल सेल के अंदर बटन जोड़ना संभव है? मैं जो करने का प्रयास कर रहा हूं वह कॉलम के साथ एक टेबल बनाना है जो डेटाबेस से डेटा (संख्या) प्रदर्शित करता है, और दो बटन एक ही सेल के अंदर संख्या को बढ़ाने/घटाने के लिए।डेटा के साथ जेटीबल के सेल के अंदर बटन जोड़ना?

| आईडी | मात्रा |
| 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; 
     } 
} 

यहाँ एक धागा interesting और here हो सकता है कि है:

यहाँ स्रोत कोड है।

+1

क्या इन बटनों पर actionListeners जोड़ना संभव है? – cp101020304

+0

बटन वास्तव में क्लिक करने योग्य नहीं हैं; क्या मुझे अपना खुद का माउस लिस्टनर या ऐसा कुछ काम करने के लिए जोड़ना होगा? – ricky3350

1

मुझे लगता है कि यदि आप सेल में टेक्स्ट (या संख्याओं) से कुछ और दिखाना चाहते हैं तो आपको कस्टम सेल रेंडरर बनाने की आवश्यकता है। सेल रेंडरर का काम सेल में जो भी दिखाना है उसे पेंट करना है।

Table Renderer documentation देखें।

तो इस मामले में आप एक छोटा जेपीन बना सकते हैं जिसमें टेक्स्ट फ़ील्ड और छोटे + और - बटन - या केवल एक जेएसपीनर घटक होता है, जो आपको चाहिए। निश्चित रूप से थोड़ा मुश्किल, लेकिन संभव होना चाहिए।

1

जैसा कि tutorial में चर्चा की गई है, आपको संपादित करने वाले सेल से ईवेंट का पता लगाने के लिए अपने मूल्य और संपादक को प्रदर्शित करने के लिए एक प्रस्तुतकर्ता की आवश्यकता होगी। इस example में, Component एक JCheckBox है। ध्यान दें कि इसके लिए एक कस्टम की आवश्यकता है जो AbstractTableModel को किसी दिए गए कॉलम के लिए सही Class प्रदान करने के लिए विस्तारित करता है। JSpinner का उपयोग करने के लिए जुनास का सुझाव अच्छा है जो अच्छी तरह से काम करता है।

संबंधित मुद्दे