问题描述
这是我的两个控制器,我想在 No_AdivinoController 中使用来自 JuegoController 的“ultimo”变量。 我有来自 JuegoController 的 getter 和 setter,但是当我想在 No_AdivinoController 中使用它时,出现 LoadException 错误或其他错误。
这是 JuegoController 类。
package pantallas;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import tda.DecisionTree;
import static tda.DecisionTree.loadTree;
/**
* FXML Controller class
*
* @author DELL
*/
public class JuegoController implements Initializable {
private final DecisionTree<String> arbol = loadTree();
private String ultimo;
@FXML
private Text pregunta;
private Button si;
private Button no;
private Button si2;
private Button no2;
public String getUltimo() {
return ultimo;
}
public void setUltimo(String ultimo) {
this.ultimo = ultimo;
}
@Override
public void initialize(URL url,ResourceBundle rb) {
mostrarPreguntas();
}
public void mostrarPreguntas(){
pregunta.setText(arbol.getRoot());
pregunta.setVisible(true);
}
public void positivo(ActionEvent event) throws IOException{
DecisionTree.Node<String> nodo = positivo(arbol);
String texto = pregunta.getText().toString();
if(texto.contains("¡")){
try{
Parent root = FXMLLoader.load(getClass().getResource("/ventanas/Adivino.fxml"));
Scene scene = new Scene(root);
Stage appStage = (Stage) ((javafx.scene.Node) event.getSource()).getScene().getwindow();
appStage.setScene(scene);
appStage.toFront();
appStage.show();
}catch(IOException e){
System.err.println(e);
}
}
if(nodo.getYes()==null || nodo.getNo()==null){
setUltimo(nodo.getData());
pregunta.setText("¡Creo que piensas en "+ nodo.getData()+"!"+" ¿Adiviné?");
}else{
pregunta.setText(nodo.getData());
}
}
public DecisionTree.Node<String> positivo(DecisionTree<String> a){
DecisionTree.Node<String> nodo = a.root;
if(nodo.getYes()!=null) a.root=nodo.getYes();
return a.root;
}
public void negativo(ActionEvent event){
DecisionTree.Node<String> nodo = negativo(arbol);
String texto = pregunta.getText().toString();
if(texto.contains("¡")){
try{
Parent root = FXMLLoader.load(getClass().getResource("/ventanas/No_Adivino.fxml"));
Scene scene = new Scene(root);
Stage appStage = (Stage) ((javafx.scene.Node) event.getSource()).getScene().getwindow();
appStage.setScene(scene);
appStage.toFront();
appStage.show();
}catch(IOException e){
System.err.println(e);
}
}
if(nodo.getYes()==null || nodo.getNo()==null){
setUltimo(nodo.getData());
pregunta.setText("¡Creo que piensas en "+ nodo.getData()+"!"+" ¿Adiviné?");
}else{
pregunta.setText(nodo.getData());
}
}
public DecisionTree.Node<String> negativo(DecisionTree<String> a){
DecisionTree.Node<String> nodo = a.root;
if(nodo.getNo()!=null) a.root = nodo.getNo();
return a.root;
}
public void adivino(ActionEvent event){
try{
Parent root = FXMLLoader.load(getClass().getResource("/ventanas/Adivino.fxml"));
Scene scene = new Scene(root);
Stage appStage = (Stage) ((javafx.scene.Node) event.getSource()).getScene().getwindow();
appStage.setScene(scene);
appStage.toFront();
appStage.show();
}catch(IOException e){
System.err.println(e);
}
}
public void noAdivino(ActionEvent event){
try{
Parent root = FXMLLoader.load(getClass().getResource("/ventanas/No_Adivino.fxml"));
Scene scene = new Scene(root);
Stage appStage = (Stage) ((javafx.scene.Node) event.getSource()).getScene().getwindow();
appStage.setScene(scene);
appStage.toFront();
appStage.show();
}catch(IOException e){
System.err.println(e);
}
}
}
这是我的 No_AdivinoController 类。我使用了字符串“un perro”。运行我的代码,但这不是我想要的。我需要从 JuegoController 类中获取真正的 String。
package pantallas;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.Pane;
import javafx.scene.text.Text;
import tda.DecisionTree;
import static tda.DecisionTree.loadTree;
/**
* FXML Controller class
*
* @author pc-4k
*/
public class No_AdivinoController implements Initializable {
private String animal;
private String desc;
private String b;
private JuegoController juegoController;
private final DecisionTree<String> arbol = DecisionTree.loadTree();
@FXML
private Text descripcion;
@FXML
private Text descripcion2;
@FXML
private Text advertencia;
@FXML
private Pane guardado;
@FXML
private Pane campo_booleano;
@FXML
private Pane campo_respuesta;
@FXML
private TextField respuesta;
@FXML
private TextField pregunta;
@FXML
private TextField pregunta1;
@FXML
private Button guardar1;
@FXML
private Button guardar2;
@FXML
private Button guardar3;
/**
* Initializes the controller class.
* @param url
* @param rb
*/
@Override
public void initialize(URL url,ResourceBundle rb) {
campo_booleano.setVisible(false);
campo_respuesta.setVisible(false);
advertencia.setText("");
guardado.setVisible(false);
}
public void guardarRespuesta(){ //validar si no ingresa signos o números
animal = respuesta.getText();
String ultimo = "un perro.";
if(animal.isEmpty()){
advertencia.setText("Por favor,llena todos los campos!!");
}else{
animal = animal.strip();
if(animal.endsWith("a")){
animal = "una "+animal;
}else if(!animal.startsWith("u")){
animal = "un "+animal;
}
campo_respuesta.setVisible(true);
descripcion.setText("¿cual es la diferencia entre "+animal+" y "+ultimo+"?");
}
}
public void guardarPregunta(){ //validar si no ingresa signos o números
desc = pregunta.getText();
if(desc.isEmpty()|| animal.isEmpty()){
advertencia.setText("Por favor,llena todos los campos!!");
}else{
campo_booleano.setVisible(true);
desc+= "?";
descripcion2.setText("Para "+animal +" la respuesta a la pregunta: "+desc+" es Sí o No?");
}
}
public void guardarBoolean(){ //validar si no ingresa signos o números //validar si ingresa si o no
b = pregunta1.getText();
if(desc.isEmpty()|| animal.isEmpty()|| b.isEmpty()){
advertencia.setText("Por favor,llena todos los campos!!");
}else{
String ultimo = "un perro.";//obtener el ultimo nodo con la funcion getUltimo();
String b2 = b.toLowerCase();
if(b2.contains("s")){
System.out.println(b2);
arbol.replace(ultimo,desc);
arbol.add(animal,desc,true);
arbol.add(ultimo,false);
}if(b2.contains("n")){
System.out.println(b2);
arbol.replace(ultimo,false);
arbol.add(ultimo,true);
}
arbol.saveTree();
guardado.setVisible(true);
}
}
public void borraradvertencia(){
advertencia.setText("");
}
public void salir(ActionEvent event){
try{
Parent root = FXMLLoader.load(getClass().getResource("/ventanas/No_Adivino.fxml"));
Scene scene = new Scene(root);
Stage appStage = (Stage) ((javafx.scene.Node) event.getSource()).getScene().getwindow();
appStage.setScene(scene);
appStage.close();
}catch(IOException e){
System.err.println(e);
}
}
public void jugar(ActionEvent event){
try{
Parent root = FXMLLoader.load(getClass().getResource("/ventanas/Juego.fxml"));
Scene scene = new Scene(root);
Stage appStage = (Stage) ((Node) event.getSource()).getScene().getwindow();
appStage.setScene(scene);
appStage.toFront();
appStage.show();
}catch(IOException e){
System.err.println(e);
}
}
}
如您所见,它们在同一个包中,并且变量有它的 getter。 请帮帮我。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)