> Java > 본문

FXML 주석이 달린 속성을 올바르게 상속하여 하위 클래스에서 사용할 수 있도록 하는 방법은 무엇입니까?

WBOY
풀어 주다: 2024-02-22 13:46:14
앞으로
709명이 탐색했습니다.

PHP 편집자 Xiaoxin이 Java Q&A 문제를 소개합니다: FXML 주석이 달린 속성을 올바르게 상속하여 서브클래스에서 사용할 수 있게 만드는 방법은 무엇입니까? Java 개발에서 FXML 주석이 달린 속성을 올바르게 상속하는 것은 일반적인 문제이며 개발 프로세스 중에 주의가 필요한 사항입니다. 아래에서는 이 문제를 더 잘 해결하는 데 도움이 되도록 주석이 달린 속성을 올바르게 상속하고 이를 하위 클래스에서 사용할 수 있게 만드는 방법에 대해 자세히 설명합니다.

질문 내용

질문

javafx를 사용하여 생성된 GUI를 통한 사용자 입력을 기반으로 메시지가 작성되는 컨트롤러 영역 네트워크를 통해 메시지 전송을 구현하려고 합니다.

main.fxml에 대한 링크가 있습니다 maincontroller 类。在 maincontroller 中,我定义了一个带 fxml 注释的 textfield 属性 in_desiredvelocity,该属性正确链接到 main.fxml 中的 fx:id.

그런 다음 네트워크를 통해 전송되어야 하는 메시지의 백본을 정의하는 추상 클래스canmessage를 정의했습니다.

이제 클래스 pctovcumessage 实现了特定类型的 canmessage。为了能够访问 fxml 属性(在 maincontroller 中定义),我决定抽象类 canmessage 扩展 maincontroller,而 pctovcumessage 扩展 canmessage는 특정 유형의 메시지를 구현합니다. fxml 속성(maincontroller에 정의됨)에 액세스할 수 있도록 추상 클래스

maincontroller를 확장하고

in_desiredvelocity nullpointerexception를 확장하기로 결정했습니다.

애플리케이션이 올바르게 컴파일되지만 GUI를 입력하면 텍스트 필드가 실행됩니다 .

질문pctovcumessage 继承的(它继承自抽象类 canmessage 并且扩展了 maincontroller

위의 fxml 속성은 (추상 클래스 에서 상속되고 maincontroller 확장)에 상속되지만, 이 클래스에서 이를 어떻게 사용하여 목표를 달성할 수 있습니까?

메인:

으아악

마스터 컨트롤러:canmessagepctovcumessage 으아악

canmessage.java(추상 클래스

확장이 포함되어 있음):

으아악 pcutovcumessage

편집

pcutovcumessage 中,我需要访问 fxml 属性 in_desiredvelocity

캔 메시지의 형식은 id(hex), data0, data1, data2, data3, ..., data7입니다. 따라서 컨트롤러에서

생성자를 호출하면 메시지 222의 ID를 전달합니다(btw는 장치의 데이터시트에 지정되어 있음) In

GUI의 텍스트 필드에 값을 입력하여 사용자가 설정한 fxml 속성 in_desiredvelocity에 액세스해야 합니다. 이렇게 하면 사용자가 입력한 값을 검색하여 메시지.

편집 2

다른 ID를 가진 여러 메시지가 있을 수 있으므로 컨트롤러의 sendmessage 메서드에서 다형성을 사용하는 것을 생각했습니다. 또한 컨트롤러 클래스의 여러 fxml 속성에 액세스해야 하는 메시지가 있을 수 있습니다. Solution

이것은 상속이 하는 일이 전혀 아닙니다. 상속은

객체

간의 관계가 아니라

클래스mainviewcontroller 的每个实例都会有一个名为 indesiredvelocity 的字段,其类型为 textfield 간의 관계입니다.

이럴 때

으아악

이것은 canmessage 的每个实例也是 mainviewcontroller을 의미합니다.

이럴 때fxmlloader 会创建 mainviewcontroller 的实例(因为 fxml 中有 fx:controller="canbusgui.mainviewcontroller"),并在该实例中初始化 indesiredvelocity 으아악 즉, 의 모든 인스턴스는 mainviewcontroller의 인스턴스이기도 합니다.

fxml을 로드할 때

필드

pctovcumessage 实例,其 id 为 "222"。由于 pctovcumessage 继承自 canmessage,因此该新实例也是 canmessage 的实例,并且由于 canmessage 继承自 mainviewcontroller,因此该实例也是 mainviewcontrollerzqbendczq 的实例b,由于 <code>mainviewcontroller 的每个实例都有一个字段 indesiredvelocity,因此 pctovcumessage 的这个新实例有一个名为 indesiredvelocity 的字段,类型为 textfieldfxml에 선언된 텍스트 필드에 대한 참조입니다.

나중에 컨트롤러에서 이 작업을 수행하게 됩니다pctovcumessage 中的 indesiredvelocity 으아악

물론, 이렇게 하면 ID가 "222"인 새

인스턴스가 생성됩니다. textfield

에서 상속되므로 이 새 인스턴스는

의 인스턴스이기도 하며, pctovcumessagemainviewcontroller에서 상속되므로 mainviewcontroller이므로 이 인스턴스는 mainviewcontrollerzqbendczq의 인스턴스이기도 합니다. > 각 인스턴스에는 <code>indesiredvelocity 필드가 있으므로

의 새 인스턴스에는

유형의 indesiredvelocity라는 필드가 있습니다. new pctovcumessage("222")

그러나 필드를 초기화하지 않으므로(합리적인 방법도 없음) 🎜 필드는 null입니다. 🎜 🎜이렇게 하면 아무 소용이 없습니다. 귀하의 도메인 모델이 무엇인지 잘 모르겠습니다(질문에 대답할 필요는 없을 것 같습니다). 하지만 🎜가 일종의 메시지 유형 객체의 일부가 된다는 것은 말이 되지 않습니다.🎜 🎜대신 🎜의 일부로 이 메시지와 함께 전송된 데이터를 보내는 것이 합리적일 수 있습니다. 즉. 할 수 있어요 🎜 으아악 🎜 컨트롤러에서 🎜를 🎜로 바꿉니다.
new PcToVcuMessage("222", Integer.parseInt(inDesiredVelocity.getText()))
로그인 후 복사

然后只需从 canmessage 类中删除 extends mainviewcontroller 即可。这显然完全没有意义(消息不是控制 ui 的东西)。

一些与您的代码无关的问题:

  1. 不要使用文本字段注册按键处理程序。要处理用户按 enter 的操作,请以通常的方式使用操作处理程序。
  2. 适当地命名类和变量。类名称应该是名词(它们代表事物)。 canmessage 是一个动词(或动词短语)。可能 message 更合适,但我还是不太明白你在这里建模的内容。

위 내용은 FXML 주석이 달린 속성을 올바르게 상속하여 하위 클래스에서 사용할 수 있도록 하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!