কম্পিউটার টিউটোরিয়াল

জাভাতে 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(); 
    } 
}

আউটপুট

জাভাতে TableCellRenderer এবং TableCellEditor-এর মধ্যে পার্থক্য কী?

  1. জাভাতে JRadioButton এবং JCheckBox-এর পার্থক্য কী?

  2. জাভাতে JTextField এবং JTextArea-এর পার্থক্য কী?

  3. জাভাতে JFrame এবং JDialog-এর পার্থক্য কী?

  4. জাভাতে GridLayout এবং GridBagLayout-এর পার্থক্য কী?