Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Problema con JTable

  1. #1

    Problema con JTable

    Ciao a tutti,

    ho un problemino fastidioso con una JTabel: ogni qualvolta sto modificando il contenuto di una cella e vado a selezionarne un'altra senza prima premere invio vengono sollevate le seguenti eccezioni:

    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at javax.swing.plaf.basic.BasicTableUI$Handler.setDis patchComponent(BasicTableUI.java:884)
    at javax.swing.plaf.basic.BasicTableUI$Handler.adjust FocusAndSelection(BasicTableUI.java:956)
    at javax.swing.plaf.basic.BasicTableUI$Handler.mouseR eleased(BasicTableUI.java:1026)
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEven tMulticaster.java:232)
    at java.awt.Component.processMouseEvent(Component.jav a:5602)
    at javax.swing.JComponent.processMouseEvent(JComponen t.java:3135)
    at java.awt.Component.processEvent(Component.java:536 7)
    at java.awt.Container.processEvent(Container.java:201 0)
    at java.awt.Component.dispatchEventImpl(Component.jav a:4068)
    at java.awt.Container.dispatchEventImpl(Container.jav a:2068)
    at java.awt.Component.dispatchEvent(Component.java:39 03)
    at java.awt.LightweightDispatcher.retargetMouseEvent( Container.java:4256)
    at java.awt.LightweightDispatcher.processMouseEvent(C ontainer.java:3936)
    at java.awt.LightweightDispatcher.dispatchEvent(Conta iner.java:3866)
    at java.awt.Container.dispatchEventImpl(Container.jav a:2054)
    at java.awt.Window.dispatchEventImpl(Window.java:1791 )
    at java.awt.Component.dispatchEvent(Component.java:39 03)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java: 463)
    at java.awt.EventDispatchThread.pumpOneEventForHierar chy(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForHierarch y(EventDispatchThread.java:190)
    at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:184)
    at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:176)
    at java.awt.EventDispatchThread.run(EventDispatchThre ad.java:110)
    Io invece preferire che quando seleziono un'altra cella il contenuto da me scritto venga salvato senza sollevare tutte queste eccezioni. Sapete come fare?? Grazie mille.

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Visto che con una semplice JTable non si riesce a ricreare la tua situazione (nessun'eccezione di sorta), mi viene in mente che tu abbia "customizzato" in qualche modo la tua JTable. Posta un po' di codice che vediamo dove potrebbe essere il problema
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Ecco il codice, specifico che le eccezioni vengono sollevate anche se non cambio il cellEditor e il cellRender...

    Grazie mille

    scaleListModel = new AbstractTableModel() {

    private static final long serialVersionUID = 2185335569490907099L;
    public Class<?> getColumnClass(int col) {
    if(col == 0){
    return String.class;
    }else{
    return Double.class;
    }
    }
    public int getColumnCount(){
    return 3;
    }
    public int getRowCount(){
    return 3;
    }
    public String getColumnName(int column) {
    switch(column) {
    case 0:
    return " ";
    case 1:
    return "Scala assoluta";
    case 2:
    return "Scala relativa";
    default:
    return "";
    }
    }
    public boolean isCellEditable(int row, int col) {
    if(col == 2){
    return true;
    }
    else{
    return false;
    }
    }
    public Object getValueAt(int row, int col) {
    if(body!=null){

    values1[0] = scaleAbsVector.x;
    values1[1] = scaleAbsVector.y;
    values1[2] = scaleAbsVector.z;
    values2[0] = scaleRelVector.x;
    values2[1] = scaleRelVector.y;
    values2[2] = scaleRelVector.z;

    }
    if(col == 0)
    return labels[row];
    else if (col == 1)
    return (Math.rint(values1[row]*1000))/1000;
    else
    return (Math.rint(values2[row]*1000))/1000;
    }
    public void setValueAt(Object value, int row, int col) {
    if(body == null){
    setWarningMessage("E' necessario selezionare un oggetto da scalare", Color.yellow);
    return;
    }


    values2[row] = (Double)value;
    scaleRelVector.set(values2[0], values2[1], values2[2]);
    body.setRelativeScale(scaleRelVector);
    updateScale();
    fireTableCellUpdated(row, col);

    }
    };

    scaleListTable = new JTable(scaleListModel);
    scaleListTable.setSelectionForeground(Color.black) ;
    scaleListTable.setShowHorizontalLines(false);
    scaleListTable.setDefaultRenderer(Object.class, new PanelTableCellRenderer());
    scaleListTable.setDefaultRenderer(Double.class, new PanelTableCellRenderer());

    TableColumn column2 = scaleListTable.getColumnModel().getColumn(2);
    column2.setCellEditor( new PanelTableCellEditor(scene3D));

    TableColumn column0 = scaleListTable.getColumnModel().getColumn(0);
    column0.setPreferredWidth(35);
    scaleListTable.getColumnModel().setColumnSelection Allowed(true);

    jScrollPane = new JScrollPane(scaleListTable);
    jScrollPane.setBounds(new Rectangle(350,50,305,scaleListTable.getRowHeight() *4 + 2));
    this.add(jScrollPane);

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.