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();
}
}
আউটপুট
