0

私はJavaが初めてです。JavaFX でサイズ変更イベントを実装したいのですが、私の問題は論理的な問題に似ています。

bp.setOnMouseClicked(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent me) {

                if (me.getButton().equals(MouseButton.PRIMARY) && me.getClickCount() % 1 == 0) {

                    bp.setPrefSize(480, 280);
                    bp.setMaxSize(480, 280);

                }

                if (me.getButton().equals(MouseButton.PRIMARY) && me.getClickCount() % 2 == 0) {
                    bp.setPrefSize(320, 180);
                    bp.setMaxSize(320, 180);

                }
            }
        });

コンポーネントの上にマウスを置いてクリックすると、コードbpのサイズが拡大されます。ダブルクリックすると、コンポーネントが再び通常のサイズに縮小されます。

この方法でコードを編集したい: コンポーネントを一度クリックして展開したい。もう一度クリックしてコンポーネントを縮小すると。ロジックをコードに変更する方法を教えてください。

4

3 に答える 3

2

シンプルなように見えますif-elseそうします:

if (me.getButton().equals(MouseButton.PRIMARY) && me.getClickCount() % 2 == 0) {
    bp.setPrefSize(480, 280);
    bp.setMaxSize(480, 280);
} else {
    bp.setPrefSize(320, 180);
    bp.setMaxSize(320, 180);
}

ただし、より良い代替手段は、でisExpanded使用するブールフィールドを持つことだと思いますhandle

if (me.getButton().equals(MouseButton.PRIMARY) && isExpanded) {
    // shrink:
    bp.setPrefSize(320, 180);
    bp.setMaxSize(320, 180);
    isExpanded = false;
} else {
    // expand:
    bp.setPrefSize(480, 280);
    bp.setMaxSize(480, 280);
    isExpanded = true;
}
于 2013-07-30T22:04:28.147 に答える
1

さて、状態を追跡する必要があります。JavaFX には詳しくありませんが、bp のクラスが編集可能なものであると仮定すると、次のように更新します。

class BP{
    public boolean expanded = false; //this should be true if default state is expanded

    public void toggleExpanded(){
        if(expanded){
            this.setPrefSize(480, 280);
            this.setMaxSize(480, 280);
        }else{
            this.setPrefSize(320, 180);
            this.setMaxSize(320, 180);
        }
    }

    //rest of BP class
}

次に、リスナーを次のようにします。

    bp.setOnMouseClicked(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent me) {

            if (me.getButton().equals(MouseButton.PRIMARY)) {
                bp.toggleExpanded();
            }
        }
    });
于 2013-07-30T22:07:55.477 に答える
1

MouseEvent.getClickCount() は、ドキュメントに記載されているように、小さな時間間隔での小さな領域のクリック数を返します。状態 (通常または拡張) を変数に格納し、それに応じてサイズと状態を切り替える必要があります。

于 2013-07-30T22:11:52.540 に答える