java - 从 JavaFX 调用 Controller 方法时,为什么不将非静态方法更改为静态修复“无法引用非静态方法”错误?
问题描述
我的第一个问题是:为什么你不能从你的主类之外调用一些方法?例如,如果我尝试将 System.out.println 放在主类之外,它必须在方法中,但这是为什么呢?
我更紧迫的问题是:
我正在尝试在 JavaFX 中构建一个简单的计算器,我有以下代码: Main
package sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root =
FXMLLoader.load(getClass().getResource("/fxml/sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 450));
primaryStage.setResizable(false);
Controller.disableDisplay(); // This is essentially what id like to do
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
控制器
package sample;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
public class Controller {
@FXML
private TextField display;
@FXML
private Button AC;
@FXML
private Button plusMinus;
@FXML
private Button percent;
@FXML
private Button divide;
@FXML
private Button seven;
@FXML
private Button eight;
@FXML
private Button nine;
@FXML
private Button times;
@FXML
private Button four;
@FXML
private Button five;
@FXML
private Button six;
@FXML
private Button minus;
@FXML
private Button one;
@FXML
private Button two;
@FXML
private Button three;
@FXML
private Button plus;
@FXML
private Button zero;
@FXML
private Button comma;
@FXML
private Button equal;
public void disableDisplay() {
display.setDisable(true);
}
}
文件格式
<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.text.Text?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.layout.HBox?>
<GridPane fx:controller="sample.Controller"
xmlns:fx="http://javafx.com/fxml"
alignment="center" hgap="10" vgap="10"
stylesheets="/css/sample.css">
<VBox>
<TextField fx:id="display" text="0" />
<HBox>
<Button fx:id="AC" styleClass="button" text="AC"/>
<Button fx:id="plusMinus" styleClass="button" text="+/-"/>
<Button fx:id="percent" styleClass="button" text="P"/>
<Button fx:id="divide" styleClass="button" text="/"/>
</HBox>
<HBox>
<Button fx:id="seven" styleClass="button" text="7"/>
<Button fx:id="eight" styleClass="button" text="8"/>
<Button fx:id="nine" styleClass="button" text="9"/>
<Button fx:id="times" styleClass="button" text="X"/>
</HBox>
<HBox>
<Button fx:id="four" styleClass="button" text="4"/>
<Button fx:id="five" styleClass="button" text="5"/>
<Button fx:id="six" styleClass="button" text="6"/>
<Button fx:id="minus" styleClass="button" text="-"/>
</HBox>
<HBox>
<Button fx:id="one" styleClass="button" text="1"/>
<Button fx:id="two" styleClass="button" text="2"/>
<Button fx:id="three" styleClass="button" text="3"/>
<Button fx:id="plus" styleClass="button" text="+"/>
</HBox>
<HBox>
<Button fx:id="zero" styleClass="button" text="0"/>
<Button fx:id="comma" styleClass="button" text=","/>
<Button fx:id="equal" styleClass="button" text="="/>
</HBox>
</VBox>
</GridPane>
这只是我想实现的方法的一个随机示例,但我不能这样做,因为它给出了以下消息:
不能从静态上下文引用非静态方法“disableDisplay()”。
但是将 disableDisplay 方法设为静态也不能解决问题,所以有没有一种我不知道的事实上的方法来做这样的事情,或者我是否以错误的方式处理这个问题?
解决方案
推荐阅读
- xamarin - 如何更改 Xamarin.Android 项目中的项目属性以在三星 Galaxy S6 Edge SM-G925F 上运行
- postgresql - 如何在 Windows 中获取 postgres 集群列表
- vue.js - 使用 v-for 和 v-show 隐藏/显示 p 元素内的附加文本
- c++ - 如何构造一个不可移动不可复制对象的元组?
- javascript - TextInput 输入空格
- sql - 如何在 Google BigQuery 中导出 Google 优化数据?
- perl - Perl Excel::Writer::XLSX Excel 函数 Move Area.function 的正确语法
- raspberry-pi - Raspbian 是实时操作系统吗?
- reactjs - 如何仅虚拟化列表项的底部?
- object - 如果是可扩展对象类型,我应该如何指向记录字段?