2013-05-04 66 views
1

好的,我創建了自己的客戶標籤,因爲這個示例非常基本。我所做的是擴展名爲MyLabel的自定義類中的Javafx Label。我也使用FXML來創建GUI。現在,當我這樣做時,我似乎無法實例化我的自定義類,因爲我得到這個錯誤。使用自定義javafx標籤不起作用

"Can not set net.blacksquirreldevs.tests.MyLabel field net.blacksquirreldevs.tests.SampleLabelController.sampleLabel to javafx.scene.control.Label" 

這裏是一切

代碼Main.java

package net.blacksquirreldevs.tests; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Scene; 
import javafx.scene.layout.AnchorPane; 
import javafx.stage.Stage; 

public class Main extends Application { 

@Override 
public void start(Stage primaryStage) throws Exception { 
    primaryStage.setTitle("SampleLabel"); 
    AnchorPane anchorPane = (AnchorPane)  FXMLLoader.load(getClass().getResource("SampleLabel.fxml")); 

    primaryStage.setScene(new Scene(anchorPane)); 
    primaryStage.show(); 
} 

public static void main(String... args) { 
    launch(args); 
} 
} 

MyLabel.java

package net.blacksquirreldevs.tests; 

import javafx.scene.control.Label; 


public class MyLabel extends Label { 

public MyLabel(String text) { 
    super(); 
    setText(text); 
} 
} 

SampleLabelController.java

package net.blacksquirreldevs.tests; 

import javafx.fxml.FXML; 

import java.net.URL; 
import java.util.ResourceBundle; 


public class SampleLabelController { 

@FXML 
private ResourceBundle resources; 
@FXML 
private URL location; 
@FXML 
private MyLabel sampleLabel = new MyLabel("Hello world!"); 


@FXML 
void initialize() { 
    assert sampleLabel != null : "fx:id=\"sampleLabel\" was not injected: check your FXML file 'SampleLabel.fxml'."; 


} 

} 

最後的FXML文件SampleLabel.fxml

<?xml version="1.0" encoding="UTF-8"?> 

<?import java.lang.*?> 
<?import java.util.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.paint.*?> 
<?import javafx.scene.text.*?> 

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml" fx:controller="net.blacksquirreldevs.tests.SampleLabelController"> 
<children> 
<Label fx:id="sampleLabel" layoutX="153.0" layoutY="171.0" text="Sample Text"> 
    <font> 
    <Font name="Arial Bold" size="50.0" /> 
    </font> 
</Label> 
</children> 
</AnchorPane> 

所以,我想知道的是,爲什麼我不能申報,在我SamplelabelController類中,sampleLabel爲MyLabel?

希望我已經解釋得很好,如果不讓我知道,我會盡量詳細一點。

回答

4

您正在使用<標籤......在你FXML而不是< MyLabel

除了你MyLabel有沒有默認的構造函數,在這種情況下,你需要提供一個名爲MyLabelBuilder建設者,使FXMLLoader可以創建一個MyLabel實例

+0

謝謝,我甚至沒有考慮過那部分,因爲我使用場景生成器來創建UI。這讓我朝正確的方向看什麼。謝謝! – DerekE 2013-05-04 23:23:16