Path: csiph.com!x330-a1.tempe.blueboxinc.net!feeder1.hal-mli.net!news.glorb.com!news-out.readnews.com!transit3.readnews.com!news-out.news.tds.net!newsreading01.news.tds.net!86597e80!not-for-mail From: "freesoft_2000" Subject: JTable Cell Renderers Message-ID: <0f1b7cf8f0d7ec76c829829ae950f4f3@localhost.talkaboutprogramming.com> X-Comment-To: comp.lang.java.gui Newsgroups: comp.lang.java.gui Content-Type: text/plain; charset=IBM437 Content-Transfer-Encoding: 8bit X-Gateway: time.synchro.net [Synchronet 3.15a-Win32 NewsLink 1.92] Lines: 283 Date: Wed, 27 Apr 2011 15:25:51 GMT NNTP-Posting-Host: 96.60.20.240 X-Complaints-To: news@tds.net X-Trace: newsreading01.news.tds.net 1303917951 96.60.20.240 (Wed, 27 Apr 2011 10:25:51 CDT) NNTP-Posting-Date: Wed, 27 Apr 2011 10:25:51 CDT Organization: TDS.net Xref: x330-a1.tempe.blueboxinc.net comp.lang.java.gui:144 To: comp.lang.java.gui Hi everyone, I am currently trying to use a JTextPane as a cell renderers for a JTable but it does not seem to work although the program compiles. I alsways get an error stating class cast exception saying that i must cast the editor component to JTextField instead of a JTextPane although i am using a JTextPane as a cell renderer. This exeption gets thrown when i try to apply some font to the selected text in the JTextPane. Below is a small compilable that i have done which compiles and throws the exception that i have mentioned about Here is the compilable example import java.awt.*; import java.awt.image.*; import java.io.*; import java.text.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.table.*; import javax.swing.text.*; public class TabTest implements ActionListener, ItemListener { JFrame fr = new JFrame ("Frame"); JButton Button1 = new JButton("Add Coloum"); JButton Button2 = new JButton("Add Row"); JComboBox ComboBox1; DefaultTableModel TableModel1 = new DefaultTableModel(0, 0); JTable Table1 = new JTable(TableModel1); JScrollPane ScrollPane1 = new JScrollPane(Table1, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); String FontFamily = "Arial"; Dimension Size1 = new Dimension(); //add //The below command line is the constructor for the JTextPane JTextPane TextPane1 = new JTextPane(); //The below two command lines creates instances for fonts SimpleAttributeSet sas = new SimpleAttributeSet(); StyleContext sc = new StyleContext(); //The below command line sets up the variable for font updating MutableAttributeSet mas; //The below command line is the default document class which //has one argument as explained below //The first argument sets the Style Context of the styled document DefaultStyledDocument dse = new DefaultStyledDocument(sc); StyledEditorKit StyledEditorKit1 = new StyledEditorKit(); CellPaneRenderer CellPaneRenderer1 = new CellPaneRenderer(); //end public void initialize () { Container pane = fr.getContentPane(); pane.setLayout(new FlowLayout()); fr.setSize(250,300); fr.setLocation(300,300); fr.setBackground(Color.lightGray); //The below command line must be set to false so that user //resizing is allowed Table1.setAutoCreateColumnsFromModel(false); Table1.setGridColor(Color.black); Size1.width = 350; Size1.height = 250; ScrollPane1.setPreferredSize(Size1); Table1.setModel(TableModel1); Table1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); Table1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); Table1.setDefaultRenderer(Object.class, new CustomTableCellRenderer(Color.white)); Table1.setDefaultRenderer(Object.class, new CellPaneRenderer()); pane.add(ScrollPane1); pane.add(Button1); pane.add(Button2); combofontfamilyinitialize(); pane.add(ComboBox1); fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Button1.addActionListener(this); Button2.addActionListener(this); ComboBox1.addItemListener(this); fr.pack(); fr.setVisible(true); } public void combofontfamilyinitialize () { //This function fills the combo box with the system available font families GraphicsEnvironment ge1 = GraphicsEnvironment.getLocalGraphicsEnvironment(); String[] k = ge1.getAvailableFontFamilyNames(); ComboBox1= new JComboBox(k); } public void setAttributeSet(AttributeSet attr) { //This function only set the specified font set by the //attr variable to the text selected by the mouse int xStart, xFinish, k; xStart = TextPane1.getSelectionStart(); xFinish = TextPane1.getSelectionEnd(); k = xFinish - xStart; if(xStart != xFinish) { dse.setCharacterAttributes(xStart, k, attr, false); } else if(xStart == xFinish) { //The below two command line updates the JTextPane according to what //font that is being selected at a particular moment mas = StyledEditorKit1.getInputAttributes(); mas.addAttributes(attr); } } public void insertcolumn (JTable table2) { //This function adds a column dynamically to the end of the JTable TableModel1 = (DefaultTableModel)table2.getModel(); TableColumn col = new TableColumn(TableModel1.getColumnCount()); //add col.setCellRenderer(CellPaneRenderer1); //end TableModel1.addColumn(" "); //The below command line adds the new column to the JTable table2.addColumn(col); TableModel1.fireTableStructureChanged(); } public void actionPerformed(ActionEvent event) { JComponent b = (JComponent)event.getSource(); int d; String str3 = null; String str4 = null, str5 = null; Object Object1 = null; Object Object2 = null; if(b == Button1) { //The below command line removes the cell editor of the JTable to //prevent any repitation of data from being added to the JTable Table1.removeEditor(); insertcolumn(Table1); } else if(b == Button2) { //The below command line removes the cell editor of the JTable to //prevent any repitation of data from being added to the JTable Table1.removeEditor(); //The below two command lines creates and adds an empty object //an a row into the current JTable Object[] v = new Object[0]; TableModel1.addRow(v); } } public void itemStateChanged(ItemEvent event) { JComponent c = (JComponent)event.getSource(); boolean d; if(c == ComboBox1) { Table1.editCellAt(0,0); FontFamily = (String)ComboBox1.getSelectedItem(); TextPane1 = (JTextPane)Table1.getEditorComponent(); if(TextPane1 != null) { StyleConstants.setFontFamily(sas, FontFamily); setAttributeSet(sas); } } } public static void main(String args[]) { TabTest a = new TabTest(); a.initialize(); } } class CellPaneRenderer extends JTextPane implements TableCellRenderer { public CellPaneRenderer() { } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { setText((String)value); setSize(table.getColumnModel().getColumn(column).getWidth(), getPreferredSize().height); if(table.getRowHeight(row) != getPreferredSize().height) { table.setRowHeight(row, getPreferredSize().height); } return this; } } Why this exception is occurring i am not very sure and really hope someone can help me with this problem. Any help is greatly appreciated Thank You Yours Sincerely Richard West --- * Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet! --- Synchronet 3.15a-Win32 NewsLink 1.92 Time Warp of the Future BBS - telnet://time.synchro.net:24