2013-10-14 31 views
2

我是使用Netbeans 7.3.1的JavaFX的新手,目前正在使用菜單。我正在閱讀本書「java Fx 2.0 Introduction by Example」,並在本書中嘗試了菜單示例,當我遇到以下錯誤時。Java FX中的菜單錯誤

構造函數類Menu中的菜單不能應用於給定的類型;
要求:無參數
發現:字符串
原因:實際的和正式的參數列表長度

這裏不同的是我的代碼,它是正確的,只要我的了JavaFx知識而言,幷包括了所有主要的Java FX菜單導入!我不知道爲什麼「菜單」構造函數不會把字符串作爲參數!請幫忙!!

package menu; 
import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.control.MenuBar; 
import javafx.scene.control.MenuItem; 
import javafx.scene.control.SeparatorMenuItem; 
import javafx.stage.Stage; 
public class Menu extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     Group root = new Group(); 
     Scene scene = new Scene(root, 300, 250); 
     primaryStage.setTitle("Hello World!"); 
     MenuBar menuBar = new MenuBar(); 
     Menu menu = new Menu("File");//This line is giving errors.. 
     menu.getItems().add(new MenuItem("New")); 
     menu.getItems().add(new MenuItem("Save")); 
     menu.getItems().add(new SeparatorMenuItem()); 
     menu.getItems().add(new MenuItem("Exit")); 
     menuBar.getMenus().add(menu); 
     root.getChildren().add(menuBar); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+1

Uluk的答案是正確的,但我會強烈考慮將此類的名稱從菜單更改爲更具體的內容。至少,一些還不是核心類名稱的東西。 – OttPrime

+1

您應該避免使用已被JavaFX定義爲標準類的類的名稱。問題是名稱衝突。 –

回答

4

你實例化的菜單是

menu.Menu // which extends javafx.​application.Application and defined by you, i.e. it is 
menu.Menu menu = new menu.Menu("File"); 

而是指定的JavaFX菜單的完整路徑:

javafx.scene.control.Menu menu = new javafx.scene.control.Menu("File"); 

或者給你的菜單不同的名稱。例如:MyAwesomeMenu :)。

+0

感謝你的想法工作!! Uluk!順便說一句,我仍然不知道爲什麼這樣工作,爲什麼我沒有..我已經包含javafx.scene.control更早導入!!爲什麼我需要再次包含它在我的代碼是超越我! –

+1

@AnkurSaha。不,您沒有導入javafx.scene.control.Menu,請在問題中查看您的代碼。有一個類名衝突,一個是JavaFX類**菜單**,另一個與您的應用程序的主類** Menu **相同​​。既然你沒有導入JavaFX菜單,並且你的Menu類不需要被導入,因爲它在它自己的類定義中,實例化的Menu被當作你在包菜單中創建和定義的菜單。最好的解決方案將改變你的班級的名稱,以特定的名稱。 –