java - 无法更改标签和按钮值
问题描述
我正在使用 JavaFx 编写一个简单的问答游戏应用程序。我想使用列表和表格中的数据在标签和按钮上设置文本。
我创建了三个类:Main、Controller 和 Quiz.fxml。我对通信类和方法有疑问。在“Main.java”中,我创建了对象“Controller controller = new Controller()”,并从“Controller.java”类中调用了“controller.setText”方法。
现在,我有几个选择:
-如果构造函数'public Controller(){}'应用程序中的declate list(ArrayList questions)和tab(String[][] answers)不起作用,我在这一行出现错误“”
-如果在“Text()”方法中声明所有内容(列表、选项卡和在标签上设置文本)应用程序运行但值按钮和标签未更改
- 如果我在“setData()”中声明列表和选项卡,接下来我想从“Text()”方法更改按钮和标签值,我看不到列表,我必须在中声明相同的列表“问题” '文本()'
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
try {
Parent root = FXMLLoader.load(getClass().getResource("/Controller/Quiz.fxml"));
Scene scene = new Scene(root,500,400)
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
Controller controller = new Controller();
controller.Text();}
控制器类:
public class Controller {
@FXML private Label questionLabel;
@FXML private RadioButton answer_btn1;
@FXML private RadioButton answer_btn2;
@FXML private RadioButton answer_btn3;
@FXML private RadioButton answer_btn4;
@FXML private Button nextBtn;
public void Text() {
List <String> questions = new ArrayList<String>();
questions.add("pytanie1");
questions.add("pytanie2");
questions.add("pytanie3");
questions.add("pytanie4");
questions.add("pytanie5");
questions.add("pytanie6");
questions.add("pytanie7");
questions.add("pytanie8");
questions.add("pytanie9");
questions.add("pytanie10");
String[][] answers = new String[1][4];
answers[1][1] = "a) odp";
answers[1][2] = "b) odp";
answers[1][3] = "c) odp";
answers[1][4] = "d) odp";
questionLabel.setText("");
questionLabel.setText(questionLabel.getText()+answers[1][1]);
answer_btn1.setText("aaa");
}
我要如何更改名称按钮和标签?
解决方案
您的代码有几个问题。
- 数组索引从零开始,如有必要,应以 arrayLength - 1 结束。您的代码:
answers[1][1] = "a) odp"; ... answers[1][4] = "d) odp";
. 它应该是什么:answers[0][0] = "a) odp"; ... answers[0][3] = "d) odp";
- 初始化控制器应该在控制器的初始化方法中完成。
下面的示例代码:
主要的:
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
/**
*
* @author blj0011
*/
public class JavaFXApplication226 extends Application
{
@Override
public void start(Stage stage) throws Exception
{
Parent root = FXMLLoader.load(getClass().getResource("Controller/Quiz.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
launch(args);
}
}
控制器:
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.RadioButton;
/**
*
* @author blj0011
*/
public class FXMLDocumentController implements Initializable
{
@FXML
private Label questionLabel;
@FXML
private RadioButton answer_btn1;
@FXML
private RadioButton answer_btn2;
@FXML
private RadioButton answer_btn3;
@FXML
private RadioButton answer_btn4;
@FXML
private Button nextBtn;
@Override
public void initialize(URL url, ResourceBundle rb)
{
// TODO
List<String> questions = new ArrayList();
questions.add("pytanie1");
questions.add("pytanie2");
questions.add("pytanie3");
questions.add("pytanie4");
questions.add("pytanie5");
questions.add("pytanie6");
questions.add("pytanie7");
questions.add("pytanie8");
questions.add("pytanie9");
questions.add("pytanie10");
String[][] answers = new String[1][4];
answers[0][0] = "a) odp";
answers[0][1] = "b) odp";
answers[0][2] = "c) odp";
answers[0][3] = "d) odp";
questionLabel.setText("");
questionLabel.setText(questionLabel.getText() + answers[0][0]);
answer_btn1.setText("aaa");
}
}
FXML
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.RadioButton?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="javafxapplication226.FXMLDocumentController">
<children>
<Button fx:id="nextBtn" layoutX="118.0" layoutY="161.0" text="Click Me!" />
<Label fx:id="questionLabel" layoutX="124.0" layoutY="36.0" minHeight="16" minWidth="69" />
<RadioButton fx:id="answer_btn1" layoutX="47.0" layoutY="92.0" mnemonicParsing="false" text="RadioButton" />
<RadioButton fx:id="answer_btn2" layoutX="193.0" layoutY="92.0" mnemonicParsing="false" text="RadioButton" />
<RadioButton fx:id="answer_btn3" layoutX="47.0" layoutY="128.0" mnemonicParsing="false" text="RadioButton" />
<RadioButton fx:id="answer_btn4" layoutX="183.0" layoutY="128.0" mnemonicParsing="false" text="RadioButton" />
</children>
</AnchorPane>
推荐阅读
- c++ - LNK2038:检测到“RuntimeLibrary”不匹配:值“MT_StaticRelease”与 main.obj 中的值“MD_DynamicRelease”不匹配
- linux - 修改子字符串而不改变 Bash 中的字符串
- wso2 - 我们可以用任何 Wso2 组件替换 apache 网络服务器吗
- ini - 使用 .ini 文件并从 .ini 文件中获取值
- ios - iPhone 进入睡眠状态时继续获取加速度计数据
- c# - 如何从 C# 中的 Async 方法读取返回值?
- html - 使 div css 宽度 1366px 高度 768px 适合父 div
- c - 以这种方式解决编译时的链表创建问题
- javascript - 为元素的子元素着色
- extjs - Extjs 绑定值没有被清除