Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

Java में TableCellRenderer और TableCellEditor के बीच क्या अंतर हैं?


TableCellRenderer

  • एक TableCellRenderer एक घटक बनाता है जो JTable सेल के मान को प्रदर्शित करता है।
  • डिफ़ॉल्ट रेंडरर प्रत्येक तालिका सेल के मान को प्रदर्शित करने के लिए JLabel का उपयोग करता है।
  • TableCellRenderer इंटरफ़ेस को दो तरीकों से निर्दिष्ट किया जा सकता है: रेंडर किए जाने वाले ऑब्जेक्ट की क्लास के अनुसार table.setDefaultRenderer() विधि का उपयोग करके और एक कॉलम के अनुसार tableColumn.setCellRenderer() विधि और विशिष्ट कॉलम हेडर के लिए tableColumn.setHeaderRenderer() विधि का उपयोग करके।
  • TableCellRenderer इंटरफ़ेस में केवल एक विधि getTableCellRendererComponent() होती है और यह विधि मान के आधार पर, एक सेल में फोकस है या चयनित है, पंक्ति और स्तंभ जो मान को समाहित कर सकते हैं, के आधार पर विभिन्न रेंडरिंग घटक वापस कर सकती है।

TableCellEditor

  • एक TableCellEditor एक इंटरफ़ेस है और डिफ़ॉल्ट रूप से, सेल संपादन योग्य हो सकते हैं।
  • एक TableCellEditor को TableModel की isCellEditable() विधि को कॉल करके निर्धारित किया जा सकता है।
  • यदि किसी सेल मान की क्लास बूलियन है, तो JCheckBox का उपयोग किया जा सकता है। यदि संपादन मोड में जाने के लिए डबल-क्लिक करना आवश्यक है, तो JTextField का उपयोग किया जा सकता है।
  • TableCellEditor इंटरफ़ेस में केवल एक विधि getTableCellEditorComponent() होती है और यह विधि मान के आधार पर, एक सेल चयनित है, पंक्ति और स्तंभ जो मान को समाहित कर सकते हैं, के आधार पर विभिन्न संपादन घटक वापस कर सकती है।

उदाहरण

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.table.*; 

public class TableCellRendererEditorTest extends JFrame { 
    private JTable table; 
    
    public TableCellRendererEditorTest() { 
        setTitle("TableCellRendererEditor Test"); 
        DefaultTableModel dtm = new DefaultTableModel() { 
            public boolean isCellEditable(int row, int column) { 
                return !(column == 0); 
            } 
        }; 
        dtm.setDataVector(new Object[][]{{"Table Cell Renderer", "Table Cell Editor"}, {"Table Cell       Renderer","Table Cell Editor"}}, new Object[]{"Renderer","Editor"}); 
        table = new JTable(dtm); 
        table.getColumn("Editor").setCellRenderer(new TextAreaRenderer()); 
        table.getColumn("Editor").setCellEditor(new TextAreaEditor()); 
        table.setRowHeight(80); 
        JScrollPane spane = new JScrollPane(table); 
        add(spane); 
        setSize(400, 275); 
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        setLocationRelativeTo(null); 
        setVisible(true); 
    } 
    public static void main(String[] args) { 
        new TableCellRendererEditorTest(); 
    } 
} 

class TextAreaRenderer extends JScrollPane implements TableCellRenderer { 
    JTextArea textarea; 
    public TextAreaRenderer() { 
        textarea = new JTextArea(); 
        textarea.setLineWrap(true); 
        textarea.setWrapStyleWord(true); 
        getViewport().add(textarea); 
    } 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row, int column) { 
        if (isSelected) { 
            setForeground(table.getSelectionForeground()); 
            setBackground(table.getSelectionBackground()); 
            textarea.setForeground(table.getSelectionForeground()); 
            textarea.setBackground(table.getSelectionBackground()); 
        } else { 
            setForeground(table.getForeground()); 
            setBackground(table.getBackground()); 
            textarea.setForeground(table.getForeground()); 
            textarea.setBackground(table.getBackground()); 
        } 
        textarea.setText((String) value); 
        textarea.setCaretPosition(0); 
        return this; 
    } 
} 

class TextAreaEditor extends DefaultCellEditor { 
    protected JScrollPane scrollpane; 
    protected JTextArea textarea; 
    public TextAreaEditor() { 
        super(new JCheckBox()); 
        scrollpane = new JScrollPane(); 
        textarea = new JTextArea(); 
        textarea.setLineWrap(true); 
        textarea.setWrapStyleWord(true); 
        scrollpane.getViewport().add(textarea); 
    } 
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { 
        textarea.setText((String) value); 
        return scrollpane; 
    } 
    public Object getCellEditorValue() { 
        return textarea.getText(); 
    } 
}

आउटपुट

Java में TableCellRenderer और TableCellEditor के बीच क्या अंतर हैं?


  1. Java में JTextField और JTextArea में क्या अंतर है? Java में JTextField और JTextArea में क्या अंतर है?

    Java में JTextField और JTextArea के बीच मुख्य अंतर यह है कि एक JTextField GUI एप्लिकेशन में टेक्स्ट की सिंगल लाइन एंटर करने की अनुमति देता है जबकि JTextArea GUI एप्लिकेशन में टेक्स्ट की मल्टीपल लाइन्स एंटर करने की अनुमति देता है। JTextField एक JTextField सबसे महत्वपूर्ण कंपोनेंट्स में से एक है जो

  1. Java में JFrame और JDialog में क्या अंतर है? Java में JFrame और JDialog में क्या अंतर है?

    JFrame फ्रेम में जोड़े गए कंपोनेंट्स को इसकी सामग्री कहा जाता है, इन्हें contentPane द्वारा प्रबंधित किया जाता है। JFrame में कंपोनेंट जोड़ने के लिए, हमें इसके contentPane का उपयोग करना चाहिए। एक JFrame में टाइटल, बॉर्डर, (वैकल्पिक) मेनू बार और यूज़र-स्पेसिफाइड कंपोनेंट्स के साथ एक विंडो होती है। ए

  1. Java में GridLayout और GridBagLayout में क्या अंतर है? Java में GridLayout और GridBagLayout में क्या अंतर है?

    एक GridLayout सभी कंपोनेंट्स को एक आयताकार ग्रिड में रखता है और इसे समान आकार के आयतों में विभाजित करता है और प्रत्येक कंपोनेंट को एक आयत के अंदर रखा जाता है जबकि GridBagLayout एक लचीला लेआउट मैनेजर है जो कंपोनेंट्स को वर्टिकली और हॉरिजॉन्टली संरेखित करता है बिना यह आवश्यकता के कि कंपोनेंट्स समान आक