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();
}
}
आउटपुट
