2016-11-08 34 views
0

「オブジェクト」をデータベースに追加しようとすると、それをTableViewに表示するとUnsupportedOperationExceptionが表示されます。javafx原因:java.lang.UnsupportedOperationException

FilteredList <Paisjet> filteredData = new FilteredList<>(data,e -> true); 

    paisjaSearch.textProperty().addListener((observableValue,oldValue,newValue) -> 
      { 
       filteredData.setPredicate(paisjet -> 
       { 
        if(newValue == null || newValue.isEmpty()) 
        { 
         return true; 
        } 
        String lowerCaseFilter = newValue.toLowerCase(); 
        if(paisjet.getPaisja().toLowerCase().contains(lowerCaseFilter)) 
        { 
         return true; 
        } 
        return false; 
       }); 
      }); 
    kategoriaSearch.textProperty().addListener((observableValue,oldValue,newValue) -> 
      { 
       filteredData.setPredicate(paisjet -> 
       { 
        if(newValue == null || newValue.isEmpty()) 
        { 
         return true; 
        } 
        String lowerCaseFilter = newValue.toLowerCase(); 
        if(paisjet.getKategoria().toLowerCase().contains(lowerCaseFilter)) 
        { 
         return true; 
        } 
        return false; 
       }); 
      }); 
    prodhuesiSearch.textProperty().addListener((observableValue,oldValue,newValue) -> 
      { 
       filteredData.setPredicate(paisjet -> 
       { 
        if(newValue == null || newValue.isEmpty()) 
        { 
         return true; 
        } 
        String lowerCaseFilter = newValue.toLowerCase(); 
        if(paisjet.getProdhuesi().toLowerCase().contains(lowerCaseFilter)) 
        { 
         return true; 
        } 
        return false; 
       }); 
      }); 
    modeliSearch.textProperty().addListener((observableValue,oldValue,newValue) -> 
      { 
       filteredData.setPredicate(paisjet -> 
       { 
        if(newValue == null || newValue.isEmpty()) 
        { 
         return true; 
        } 
        String lowerCaseFilter = newValue.toLowerCase(); 
        if(paisjet.getModeli().toLowerCase().contains(lowerCaseFilter)) 
        { 
         return true; 
        } 
        return false; 
       }); 
      }); 

    SortedList <Paisjet> sortedData = new SortedList<>(filteredData); 
    sortedData.comparatorProperty().bind(tableView.comparatorProperty()); 
    tableView.setItems(sortedData); 

OUTPUT:

Caused by: java.lang.UnsupportedOperationException 
at java.util.AbstractList.remove(AbstractList.java:161) 
at java.util.AbstractList$Itr.remove(AbstractList.java:374) 
at java.util.AbstractList.removeRange(AbstractList.java:571) 
at java.util.AbstractList.clear(AbstractList.java:234) 
at main.MainWindowController.clearTable(MainWindowController.java:315) 
at main.MainWindowController.addToTableFromDatabase(MainWindowController.java:320) 
at main.MainWindowController.addToDatabase(MainWindowController.java:309) 
... 61 more 

clearTable():

public void clearTable() 
{ 
    tableView.getItems().clear(); // line 315 at OUTPUT ERROR 
} 
i "は、公共ボイドのinitialize()は、" "SearchBoxes" としてテキストフィールドを作成するには、このコードを追加するまで、すべてが大丈夫でした

addToTableFromDatabase():

public void addToTableFromDatabase() throws ClassNotFoundException, SQLException 
{ 
    clearTable(); //line 320 at OUTPUT ERROR 
    Class.forName("com.mysql.jdbc.Driver"); 
    String url="jdbc:mysql://***.***.**.*:****/*********"; 
    String uname="*****"; 
    String pass="*********"; 
    connect = (Connection) DriverManager.getConnection(url,uname,pass); 

    Statement statement; 
    String query = "SELECT * FROM paisjettable" ; 
    statement = connect.createStatement(); 
    ResultSet rs = statement.executeQuery(query); 

    while(rs.next()) 
    { 

     int id = rs.getInt("id"); 
     String prodhuesi = rs.getString("prodhuesi"); 
     String modeli = rs.getString("modeli"); 
     String paisja = rs.getString("paisja"); 
     String pjesa = rs.getString("pjesa"); 
     String infoshtese = rs.getString("infoshtese"); 
     double qmimi = rs.getDouble("qmimi"); 
     double punedore = rs.getDouble("punedore"); 
     double pagesa = rs.getDouble("pagesa"); 
     int sasia = rs.getInt("sasia"); 

     paisjet = new Paisjet(id,prodhuesi,modeli,paisja,pjesa,qmimi,punedore,pagesa,sasia,infoshtese); 
     data.add(paisjet); 
     tableView.setItems(data); 
    } 

    rs.close(); 
    connect.close(); 
} 

addToDatabase():あなたが(常にその基礎となるリストのソートされたバージョンであることを想定しているので)直接変更することはできませんソートされたリストにテーブルビューのバッキングリスト(items)を設定している

public void addToDatabase() throws ClassNotFoundException, SQLException 
{ 
    addToDatabaseMethod(count,prodhuesiField.getText(),modeliField.getText(),paisjaField.getText(),pjesaField.getText(),Double.parseDouble(qmimiField.getText()),Double.parseDouble(puneDoreField.getText()),Integer.parseInt(sasiaField.getText()),infoArea.getText()); 
    count++; 
    prodhuesiField.clear(); 
    modeliField.clear(); 
    paisjaField.clear(); 
    pjesaField.clear(); 
    qmimiField.clear(); 
    puneDoreField.clear(); 
    sasiaField.clear(); 
    infoArea.clear(); 
    addToTableFromDatabase(); // line 309 from OUTPUT ERROR 
} 

答えて

3

。したがってtable.getItems()は、SortedListtable.getItems().clear()の修正を試み、例外をスローします。

最初のコードブロックでdataと呼ばれる基本的なリストを変更する必要があります。コードブロックのコンテキストを表示していないので、その変数のスコープが何であるかは不明ですが、table.getItems().clear()の代わりにdata.clear()が本質的に必要です。

(これは、フィルタリングやソートを削除しますとまた、あなたは、addToTableFromDatabaseであなたのループ内でtable.setItems(data)をコールする必要はありません。)

+0

はそんなにありがとう:) –

関連する問題