Exception in thread "AWT-EventQueue-0" java.lang.Classcastexception-Fehler: javax.swing.JTable
Ich habe eine code, die, wenn Sie ausgeführt wird, erzeugt eine Tabelle in swing-form, die enthält eine Reihe von Checkboxen, die ausgewählt werden können oder nicht
Wenn ich auf Check all (Alle Register ich bin in der Lage zu aktivieren/deaktivieren Sie alle anderen unten, check Boxen, aber wenn ich wählen Sie eines der unten aufgeführten Kontrollkästchen einzeln bekomme ich diesen Fehler :
> Exception in thread "AWT-EventQueue-0" java.lang.Classcastexception-Fehler: javax.swing.JTable bei com.tps.charts.CheckBoxHeader.handleClickEvent(JTableHeaderCheckBox.java:152) bei com.tps.charts.CheckBoxHeader.mouseClicked(JTableHeaderCheckBox.java:168) bei java.das awt.AWTEventMulticaster.mouseClicked(Quelle Unbekannt) bei java.das awt.AWTEventMulticaster.mouseClicked(Quelle Unbekannt) bei java.das awt.AWTEventMulticaster.mouseClicked(Quelle Unbekannt) bei java.das awt.AWTEventMulticaster.mouseClicked(Quelle Unbekannt) bei java.das awt.AWTEventMulticaster.mouseClicked(Quelle Unbekannt) mousePressed...... bei java.das awt.AWTEventMulticaster.mouseClicked(Quelle Unbekannt) bei java.das awt.AWTEventMulticaster.mouseClicked(Quelle Unbekannt) bei java.das awt.AWTEventMulticaster.mouseClicked(Quelle Unbekannt) bei java.das awt.Komponente.processMouseEvent(Unknown Source) bei javax.swing.JComponent.processMouseEvent(Unknown Source) bei java.das awt.Komponente.processEvent(Unknown Source) bei java.das awt.Container.processEvent(Unknown Source) bei java.das awt.Komponente.dispatchEventImpl(Quelle Unbekannt) bei java.das awt.Container.dispatchEventImpl(Quelle Unbekannt) bei java.das awt.Komponente.dispatchEvent(Unknown Source) bei java.das awt.LightweightDispatcher.retargetMouseEvent(Quelle Unbekannt) bei java.das awt.LightweightDispatcher.processMouseEvent(Unknown Source) bei java.das awt.LightweightDispatcher.dispatchEvent(Unknown Source) bei java.das awt.Container.dispatchEventImpl(Quelle Unbekannt) bei java.das awt.Fenster.dispatchEventImpl(Quelle Unbekannt) bei java.das awt.Komponente.dispatchEvent(Unknown Source) bei java.das awt.EventQueue.dispatchEvent(Unknown Source) bei java.das awt.EventDispatchThread.pumpOneEventForHierarchy(Quelle Unbekannt) bei java.das awt.EventDispatchThread.pumpEventsForHierarchy(Quelle Unbekannt) bei java.das awt.EventDispatchThread.pumpEvents(Unknown Source) bei java.das awt.EventDispatchThread.pumpEvents(Unknown Source) bei java.das awt.EventDispatchThread.run(Unknown Source)
Den code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class JTableHeaderCheckBox {
private Object colNames[] = {"", "String", "String"};
private Object[][] data = {};
private DefaultTableModel dtm;
private JTable table;
private TableColumn tc;
public void buildGUI() {
dtm = new DefaultTableModel(data, colNames);
table = new JTable(dtm);
for (int x = 0; x < 5; x++) {
dtm.addRow(new Object[]{false, "Row " + (x + 1) + " Col 2", "Row " + (x + 1) + " Col 3"});
}
JScrollPane sp = new JScrollPane(table);
tc = table.getColumnModel().getColumn(0);
tc.setCellEditor(table.getDefaultEditor(Boolean.class));
tc.setCellRenderer(table.getDefaultRenderer(Boolean.class));
tc.setHeaderRenderer(new CheckBoxHeader(new MyItemListener()));
JFrame f = new JFrame();
f.getContentPane().add(sp);
f.pack();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
private class MyItemListener implements ItemListener {
@Override
public void itemStateChanged(ItemEvent e) {
System.out.println("ItemStateChanged");
Object source = e.getSource();
if (source instanceof AbstractButton == false) {
return;
}
boolean checked = e.getStateChange() == ItemEvent.SELECTED;
for (int x = 0, y = table.getRowCount(); x < y; x++) {
table.setValueAt(checked, x, 0);
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new JTableHeaderCheckBox().buildGUI();
}
});
}
}
class CheckBoxHeader extends JCheckBox implements TableCellRenderer, MouseListener {
private static final long serialVersionUID = 1L;
private CheckBoxHeader rendererComponent;
private int column;
private boolean mousePressed = false;
public CheckBoxHeader(ItemListener itemListener) {
rendererComponent = this;
rendererComponent.addItemListener(itemListener);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (table != null) {
JTableHeader header = table.getTableHeader();
table.addMouseListener(rendererComponent);
if (header != null) {
rendererComponent.setForeground(header.getForeground());
rendererComponent.setBackground(header.getBackground());
rendererComponent.setFont(header.getFont());
header.addMouseListener(rendererComponent);
}
}
setColumn(column);
rendererComponent.setText("Check All");
setBorder(UIManager.getBorder("TableHeader.cellBorder"));
return rendererComponent;
}
protected void setColumn(int column) {
this.column = column;
}
public int getColumn() {
return column;
}
protected void handleClickEvent(MouseEvent e) {
if (mousePressed) {
mousePressed = false;
JTableHeader header = (JTableHeader) (e.getSource());
JTable tableView = header.getTable();
TableColumnModel columnModel = tableView.getColumnModel();
int viewColumn = columnModel.getColumnIndexAtX(e.getX());
column = tableView.convertColumnIndexToModel(viewColumn);
if (viewColumn == this.column && e.getClickCount() == 1 && column != -1) {
System.out.println(" doClick()......");
doClick();
}
}
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println(" mouseClicked()......");
handleClickEvent(e);
/* problem occurs from this line */
((JTableHeader) e.getSource()).repaint();
}
@Override
public void mousePressed(MouseEvent e) {
//System.out.println("mousePressed(MouseEvent e).......");
mousePressed = true;
}
@Override
public void mouseReleased(MouseEvent e) {
//System.out.println(" mouseReleased()......");
}
@Override
public void mouseEntered(MouseEvent e) {
//System.out.println(" mouseEntered()......");
}
@Override
public void mouseExited(MouseEvent e) {
//System.out.println("mouseExited()......");
}
}
mit Ausnahme
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException:
javax.swing.JTable cannot be cast to javax.swing.table.JTableHeader
IMO, dieses code ist deutlich fehlerhaft mit Bezug auf das model-view-Indizierung und-Kupplung. Versuchen Sie, eine Säule zu sehen, die Wirkung.
Siehe auch diese Q&A.
Siehe auch diese Q&A.
InformationsquelleAutor user716775 | 2011-08-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
On line 152:
JTableHeader header = (JTableHeader)(e.getSource());
Sie davon aus, die Veranstaltung ist auf die Kopfzeile der Tabelle. Sie müssen prüfen, Quelle die Klasse, um zu sehen, ob es auf dem Kopf oder einer einzelnen checkbox.verwenden
e.getSource().getClass().getName()
odere.getSource() instanceof JTableHeader
ja danke jetzt bin ich dabei einen Scheck auf den Namen der Komponente (JTable oder JTableHeader) und dann eine seperate Maus, drücken Sie die action-Methode auf der Grundlage der Komponente.Jetzt muss ich check whther alle Zellen (Ankreuzfelder) sind vollständig ausgewählt ist oder nicht und auf dieser Basis brauchen, um zu wählen/abzuwählen der JTableHeader (Überprüfen Sie Alle Kontrollkästchen).Ich bleib hier oben. Hilfe dankbar...
InformationsquelleAutor Vlad
Umwandlung von der Quelle des Ereignisses eine
JTableHeader
:und die Quelle ist ein
JTable
wenn Sie klicken Sie auf eine Zelle. Ich hätte zwei verschiedenen Zuhörer für die Kopf-und die Zell-Auswahl-oder Sie tun können, einen hack durch die überprüfungevent.getSource() instanceof ...
in Ihrer Maus-Klick-listener.InformationsquelleAutor dacwe