1

アップロードの一連の行を表示する JTable を持つアップローダ プログラムがあります。「Clear Completed」というラベルの付いた JButton があり、クリックすると完了したアップロードの行が削除されます。チェックボックスがチェックされている場合、行が自動的に削除されるように、JCheckBox/JButton の組み合わせ (gmail のチェックボックス/ドロップダウンの組み合わせのようなもの) が必要です。

JButton を拡張するクラスを作成し、コンストラクターをオーバーライドして JCheckBox を追加しました。JCheckBox と JButton の両方に ActionListeners を追加しました。このように見えます。

http://i.stack.imgur.com/KcBHv.png

すべてが完璧に機能します。でも、使うか使わないかで悩んでいます。これは JButton API の使用を意図したものではなく、Java アプリでそのようなコントロールを (今のところ) 見たことがないので、ユーザーに問題が発生するのではないかと心配しています。

これにより、実行時に UI が壊れるなどの問題が発生しますか? または、すべての OS で動作しない可能性はありますか? (私はWindows7を使用しています)

それとも、良い設計アプローチではありませんか? (「ユーザーは驚かないでください」というルール..彼らは理解すると思います。そのチェックボックスのツールチップも含めました)

ご意見をお聞かせください。ありがとうございました。

4

3 に答える 3

3

これにより問題が発生しますか

多分。たとえば、ネイティブ ウィジェットを使用してボタンをレンダリングすると、レンダリングの問題が発生する可能性があります。または、ボタンがイベントを飲み込むため、チェックボックスがクリックに応答しない場合があります。

それは良い設計アプローチですか?

あまり。ほとんどのユーザーは、これまでボタン内にチェックボックスを見たことがないため、レイアウトにバグがあると考えるでしょう。レンダリングの問題 (ボタンを押すとチェックボックスがどのように見えるか? 消えたり、変な色でレンダリングされたりしますか?) に加えて、これは避けるべきだと思います。

標準的なアプローチを使用します: ボタンの上にテキスト (「自動的にクリア」) のあるチェックボックス。チェックボックスが「閉じる」に選択されたときにボタンのテキストを変更するかもしれません。

于 2011-08-25T09:18:24.350 に答える
2

これにより、実行時に UI が壊れるなどの問題が発生しますか? または、すべての OS で動作しない可能性はありますか? (私はWindows7を使用しています)

これで問題ないと思います。

それとも、良い設計アプローチではありませんか? (「ユーザーは驚かないでください」というルール..彼らは理解すると思います。そのチェックボックスのツールチップも含めました)

個人的には、チェックボックスを JButton の左側に配置すると、より明確になると思います。とにかくそれはあなた次第です。さらに、実行された素早い動きにより、ユーザーはチェックボックスではなくボタンをクリックする可能性があります。

于 2011-08-25T08:53:39.703 に答える
0

誰かがこれをどのように行うのか疑問に思っている場合に備えて。ボタンのサイズと同様のサイズを維持するには、おそらく EmptyBorder(4,4,4,4) を追加する必要があります。私は通常、他のボタンと一緒にグリッド レイアウトでそれらをラップします。

            new JCheckBox() {
            JButton button = new JButton();
            {
                button.setModel(getModel());
            }

            @Override
            protected void paintComponent(Graphics g) {
                if (!button.getSize().equals(getSize())) {
                    button.setSize(getSize());
                }

                button.paint(g);
                super.paintComponent(g);
            }

            @Override
            public void setEnabled(boolean b) {
                super.setEnabled(b);
                button.setEnabled(b);
            }
        };
于 2012-07-20T06:48:39.930 に答える