2016-08-09 1 views
1

Ich versuche, einen ActionListener zu einem Label hinzuzufügen, der herausspringt, wenn der Benutzer ein falsches Passwort eingibt oder sich anmeldet. Hier ist meine Anmeldung Controller-Wie man einen actionListener zu einem Label in JavaFx hinzufügt

public class LoginController implements Initializable { 

@FXML 
private Label label; 
@FXML 
private TextField LoginField; 
@FXML 
private PasswordField PasswdField; 
@FXML 
private Button LogInButton; 
@FXML 
private Label IncorrectDataLabel; 
//private String uri = "http://google.com"; 



@FXML 
private void LogIn(ActionEvent event) throws IOException { 
    if(LoginField.getText().equals("MKARK")&&PasswdField.getText().equals("KACZOR1")) 
    { 

     Parent parent = FXMLLoader.load(getClass().getResource("/fxmlFiles/MainScreen.fxml")); 
     Scene MainScene = new Scene(parent); 
     Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); 
     stage.setScene(MainScene); 
     stage.show(); 


    } 
    else 
    { 
     IncorrectDataLabel.setVisible(true); 
     // <------------------- Here I want to bind hyperlink to a label with would open the google site, whenever user clicks it. 
} 




@Override 
public void initialize(URL url, ResourceBundle rb) { 
    // TODO 
} 

Wie bin ich in der Lage, diese Frage zu lösen? Ich habe viele Male versucht (setOnAction, addMouseListener), aber nichts hat funktioniert :(.

Wenn es Ihnen nichts ausmacht würde ich auch über die öffentliche Void initialisieren Funktion fragen. Wofür ist es? Es Pop-out automatisch, wenn ich die Klasse erstellt .

Vielen Dank im Voraus

+1

Etiketten lösen keine Aktionsereignisse aus, daher ist nicht klar, was Sie meinen. Was macht der Benutzer eigentlich, um diese Methode ausführen zu lassen? (Die Methode 'initialize()' wird aufgerufen, nachdem die '@ FXML'-Felder mit Anmerkungen versehen wurden, und dient zum Initialisieren des Controllers.) –

+0

Ich meine, dass der Benutzer nach dem Ausblenden von IncorrectDataLabel darauf klicken kann und umgeleitet auf die Webseite, die ich möchte (so wie die Hyperlinks funktionieren). – Michael

+1

Warum nicht einen ['Hyperlink'] (http://docs.oracle.com/javase/control/Hyperlink.html) anstelle eines Labels verwenden? –

Antwort

1

Labels Aktionsereignisse nicht feuern Sie einen Listener verwenden könnte für Mausereignisse geklickt haben, zB:.

@FXML 
private void gotoGoogle() { 
    // open url etc 
} 

und in der FXML Datei

<Label fx:id="IncorrectDataLabel" onMouseClicked="#gotoGoogle" ... /> 

Es ist jedoch wahrscheinlich sinnvoller, hierfür eine Hyperlink zu verwenden, die dem Benutzer eine bessere visuelle Rückmeldung geben würde, dass es etwas war, auf das er klicken sollte. Ersetzen Sie einfach das Etikett mit

<Hyperlink fx:id="IncorrectDataLabel" onAction="#gotoGoogle" text="..." ... /> 

und die Art in der Steuerung entsprechend aktualisieren:

@FXML 
private Hyperlink IncorrectDataLabel ; 

Sie den entsprechenden Import muß für javafx.control.Hyperlink sowohl in der FXML-Datei und in der Steuerung.

Off-Topic Hinweis: Verwenden Sie proper Java naming conventions für Ihre Variablen- und Methodennamen.

Verwandte Themen