2013-11-22 69 views
1

點擊它我彈出一個彈出窗口。 Pop有一個動態創建的帶有tableview的堆棧窗格。如果我雙擊表中的一行或我輸入esc它的工作正常。 問題是當我點擊背景舞臺上的任何地方時,它給我下面的錯誤。當我點擊從彈出窗口啓動的舞臺時如何關閉彈出窗口。請建議。javafx IllegalArguementException當彈出窗口打開並在後臺點擊鼠標

java.lang.IllegalArgumentException: argument type mismatch 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:601) 
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1435) 
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:69) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170) 
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92) 
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53) 
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:33) 
at javafx.event.Event.fireEvent(Event.java:171) 
at javafx.scene.Scene$MouseHandler.process(Scene.java:3324) 
at javafx.scene.Scene$MouseHandler.process(Scene.java:3164) 
at javafx.scene.Scene$MouseHandler.access$1900(Scene.java:3119) 
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1559) 
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2261) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:228) 
at com.sun.glass.ui.View.handleMouseEvent(View.java:528) 
at com.sun.glass.ui.View.notifyMouse(View.java:922) 
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29) 
at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:73) 
at java.lang.Thread.run(Thread.java:722) 

下面是我的代碼

public void trkTripNoBtnClick(ActionEvent ae){ 
    StackPane st = new StackPane(); 
    final TableView<GatePassDTO> tripListTableView = new TableView<GatePassDTO>(); 
    TableColumn<GatePassDTO,String> colTrkTripNo = new TableColumn<GatePassDTO,String>(); 
    TableColumn<GatePassDTO,Date> colGatePassDttm = new TableColumn<GatePassDTO,Date>(); 
    TableColumn<GatePassDTO,String> colTruckNo = new TableColumn<GatePassDTO,String>(); 
    TableColumn<GatePassDTO,String> colBat = new TableColumn<GatePassDTO,String>(); 
    colTrkTripNo.setText("Trip No"); 
    colTrkTripNo.setCellValueFactory(new PropertyValueFactory<GatePassDTO,String>("tourPlnNo")); 
    colGatePassDttm.setText("Gate Pass Dttm"); 
    colGatePassDttm.setCellValueFactory(new PropertyValueFactory<GatePassDTO,Date>("gatePassDttm")); 
    colTruckNo.setText("Truck"); 
    colTruckNo.setCellValueFactory(new PropertyValueFactory<GatePassDTO,String>("haulPmNo")); 
    colBat.setText("BAT ID"); 
    colBat.setCellValueFactory(new PropertyValueFactory<GatePassDTO,String>("batId")); 
    List<GatePassDTO> tripsList = GateIn.getGatePassReference().gateIn_tourPlnNoLookUp(1); 
    tripListTableView.getColumns().addAll(colTrkTripNo,colGatePassDttm,colTruckNo,colBat); 
    tripListTableView.setItems(FXCollections.observableList(tripsList)); 
    final Popup popup = new Popup(); 
    popup.setX(txtTrkTripNo.getLayoutX()); 
    popup.setY(txtTrkTripNo.getLayoutY()+txtTrkTripNo.getHeight()+30); 

    colTrkTripNo.prefWidthProperty().bind(tripListTableView.widthProperty().multiply(0.20)); 
    colGatePassDttm.prefWidthProperty().bind(tripListTableView.widthProperty().multiply(0.45)); 
    colTruckNo.prefWidthProperty().bind(tripListTableView.widthProperty().multiply(0.15)); 
    colBat.prefWidthProperty().bind(tripListTableView.widthProperty().multiply(0.20)); 
    tripListTableView.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>(){ 
     @Override 
     public void handle(MouseEvent t) { 
      if(t.getClickCount() == 2 && tripListTableView.getSelectionModel().getSelectedItem() !=null){ 
       GatePassDTO g = tripListTableView.getSelectionModel().getSelectedItem(); 
       popup.hide(); 
       txtTrkTripNo.setText(g.getTourPlnNo()); 
       getTripDetails(txtTrkTripNo.getText()); 
      } 
     } 
    }); 
    tripListTableView.addEventHandler(KeyEvent.KEY_PRESSED,new EventHandler<KeyEvent>(){ 

     @Override 
     public void handle(KeyEvent t) { 
      if(t.getCode() == KeyCode.ESCAPE) 
       popup.hide(); 
     } 

    }); 
    /*Label lblFind = new Label("Find"); 
    TextField txtfind = new TextField(); 
    st.getChildren().add(lblFind); 
    st.getChildren().add(txtfind);*/ 
    st.getChildren().add(tripListTableView); 
    VBox v = new VBox(5); 
    v.getChildren().addAll(st); 
    popup.getContent().addAll(v);  
    popup.show(GateIn.primaryStage);  
} 
+0

可以顯示代碼?你可以把鼠標事件只在桌上或完整的階段? –

+0

@Anshul Parashar在我的問題中添加了代碼。 – developer

+0

我正在給一個答案嘗試一下吧 –

回答

0

你必須檢查階段的重點物業...

試試這個工作它

stage.focusedProperty().addListener(new ChangeListener<Boolean> 
    () { 

     @Override 
     public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) { 
      if(t1==false) 
      { 
       System.out.println("focus losted"); 
       btn.getScene().getWindow().hide(); 
      } 
     } 
    }); 
+0

嗨,鼠標點擊桌子上工作完美。問題是當我在彈出窗口打開時點擊彈出窗口外 – developer

+1

@Sil我被編輯在上面的答案...實際上問題不在你的代碼中,你需要鎖定彈出窗口...即當你點擊彈出窗口外它不工作,並通過形式 –

+0

完成喜歡在MS單詞當我們點擊查找彈出 - 打開,但當點擊外面它不工作,直到彈出不關閉 –

相關問題