検索
ホームページJavaFXML アノテーション付きプロパティを適切に継承してサブクラスで使用できるようにするにはどうすればよいでしょうか?

php エディタ Xiaoxin は、Java Q&A のこの号を提供します: FXML アノテーション付きプロパティを正しく継承してサブクラスで使用できるようにする方法は? Java 開発では、FXML アノテーション付きプロパティを正しく継承することが一般的な問題であり、開発プロセス中に注意が必要な問題です。以下では、この問題をより適切に解決するために、アノテーション付きプロパティを正しく継承し、サブクラスで使用できるようにする方法について詳しく説明します。

質問内容

質問

コントローラ エリア ネットワーク上でメッセージ転送を実装しようとしています。メッセージは、javafx を使用して作成された GUI を介したユーザー入力に基づいて構築されます。

main.fxml にリンクされた maincontroller クラスがあります。 maincontroller では、fxml アノテーション in_desiredvelocity を使用してテキストフィールド属性を定義しました。これは、main.fxml の fx:id に適切にリンクされています。

次に、ネットワーク経由で送信する必要があるメッセージのバックボーンを定義する抽象クラス canmessage を定義しました。

今、クラス pctovcumessage は特定のタイプの canmessage を実装しています。 fxml プロパティ (maincontroller で定義) にアクセスできるようにするために、抽象クラス canmessagemaincontroller を拡張し、pctovcumessage が # を拡張することにしました。 ##メッセージを送信できます。

アプリケーションは正しくコンパイルされますが、GUI に入力すると、テキストフィールド

in_desiredvelocity nullpointerException が起動されます。 ######質問######

上記の fxml プロパティは

pctovcumessage (抽象クラス canmessage

を継承し、

maincontroller を拡張) によって継承されますが、これをこのプロパティに追加するにはどうすればよいですか?クラス 目標を達成するためにそれを使用しますか? ######主要###:### リーリー メインコントローラー: リーリー

canmessage.java (抽象クラス canmessage

が含まれており、

pctovcumessage がそれを拡張します): リーリー ######編集######

缶メッセージの形式は次のとおりです: id(hex)、data0、data1、data2、data3、...、data7。したがって、コントローラーで

pcutovcumessage のコンストラクターを呼び出すときは、メッセージ 222 の ID を渡します (ちなみに、これはデバイスのデータシートで指定されています) pcutovcumessage では、ユーザーが GUI のテキストフィールドに値を入力して設定した fxml プロパティ in_desiredvelocity

にアクセスする必要があります。これにより、ユーザーは次のようになります。取得 メッセージを作成するために入力された値。

編集 2

異なる ID を持つ複数のメッセージが存在する可能性があるため、コントローラーの sendmessage メソッドでポリモーフィズムを使用することを考えました。さらに、コントローラー クラスから複数の fxml プロパティへのアクセスを必要とするメッセージが存在する場合があります。

解決策

これは継承の役割ではありません。継承は、オブジェクト間の関係ではなく、クラス

間の関係です。

これを行う場合 リーリー

これは、

mainviewcontroller

のすべてのインスタンスに、

textfield

型の

indesiredvelocity という名前のフィールドがあることを意味します。 これを行う場合 リーリー

これは、

canmessage

のすべてのインスタンスが

mainviewcontroller のインスタンスでもあることを意味します。 fxml をロードすると、fxmlloadermainviewcontroller

のインスタンスを作成します (fxml に

fx:controller="canbusgui.mainviewcontroller"

があるため)、そしてインスタンス

で初期化された indesiredvelocity フィールドは、fxml で宣言されたテキスト フィールドへの参照です。

後ほどコントローラーでこれを行います

リーリー もちろん、これにより、ID "222" を持つ新しい pctovcumessage インスタンスが作成されます。 pctovcumessagecanmessage から継承するため、この新しいインスタンスは canmessage

のインスタンスでもあり、

canmessage

mainviewcontroller# から継承するため、 # # したがって、このインスタンスは mainviewcontrollerzqbendczq のインスタンス b でもあります。mainviewcontroller の各インスタンスにはフィールド indesiredvelocity があるため、pctovcumessage## のこの新しいインスタンスは#indesiredvelocity という名前のフィールドがあり、タイプは textfield です。 ただし、フィールドを初期化することはありません (また、そのための賢明な方法がない) ため、pctovcumessageindesiredvelocity<code> フィールドは null になります。 そんなことをしても意味がありません。ドメイン モデルが何であるかはよくわかりません (おそらくこの質問に答える必要はありません) が、textfield が何らかの型のオブジェクトの一部であることは意味がありません。メッセージの. 代わりに、pctovcumessage の一部としてこのメ​​ッセージを含むデータを送信する方が合理的かもしれません。つまり。できるよ### リーリー そして、コントローラー内の

new pctovcumessage("222")

に置き換えます。 <pre class='brush:php;toolbar:false;'>new PcToVcuMessage(&quot;222&quot;, Integer.parseInt(inDesiredVelocity.getText()))</pre> <p>然后只需从 <code>canmessage 类中删除 extends mainviewcontroller 即可。这显然完全没有意义(消息不是控制 ui 的东西)。

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

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

以上がFXML アノテーション付きプロパティを適切に継承してサブクラスで使用できるようにするにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はstackoverflowで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター