JTable グループにラジオ ボタンを追加するときに排他性を実現するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-12 06:43:02
オリジナル
257 人が閲覧しました

How to Achieve Exclusivity When Adding Radio Buttons to JTable Groups?

JTable 内のグループへのラジオ ボタンの追加

問題ステートメント

レンダラとエディタを使用して JTable にラジオ ボタンを追加しようとした結果、独占性を達成できないこと。提供されているコード スニペットは、この問題を示しています。

代替解決策

代替案として、行内で相互に排他的な選択を行うためのエディターとして JComboBox を使用することを検討してください。これは、スペース管理とユーザー エクスペリエンスにとってより効率的なアプローチです。

コード例

// ...
// Import declarations
// ...

public class JRadioAsRendererEditor extends JPanel {

    // ...
    // Class variables and methods
    // ...

    private class StatusRenderer extends StatusPanel implements TableCellRenderer {

        // ...
        // Overridden methods
        // ...

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
            setStatus((Status) value);
            if (isSelected) {
                setBackground(table.getSelectionBackground());
            } else {
                setBackground(table.getBackground());
            }
            return this;
        }
    }
}
ログイン後にコピー

その他の代替案

1.代替のレンダラとエディタ

独自のカスタム レンダラ クラスとエディタ クラスを作成して、目的の動作を実現できます。以下に例を示します:

public class RadioCellRenderer extends DefaultTableCellRenderer {

    private RadioButtonGroup group;

    public RadioCellRenderer(RadioButtonGroup group) {
        this.group = group;
    }

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,
        boolean isSelected, boolean hasFocus, int row, int column) {
        JRadioButton button = (JRadioButton) value;
        button.setSelected(group.isSelected(button));
        return button;
    }
}

public class RadioCellEditor extends DefaultCellEditor {

    private RadioButtonGroup group;

    public RadioCellEditor(JRadioButtonCheckBox box, RadioButtonGroup group) {
        super(box);
        this.group = group;
    }

    @Override
    public Object getCellEditorValue() {
        return delegate.get();
    }

    @Override
    public Component getTableCellEditorComponent(JTable table, Object value,
        boolean isSelected, int row, int column) {
        JRadioButton button = (JRadioButton) value;
        if (group.isClearable()) {
            group.clearSelection();
        }
        group.add(button);
        return button;
    }
}
ログイン後にコピー

2. DefaultTableCellRenderer および DefaultCellEditor

排他性を処理するカスタム JRadioButton で DefaultTableCellRenderer クラスと DefaultCellEditor クラスを使用できます。以下に例を示します:

public class ExclusiveJRadioButton extends JRadioButton {

    private RadioButtonGroup group;

    public ExclusiveJRadioButton(RadioButtonGroup group) {
        this.group = group;
        addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                group.setSelected(ExclusiveJRadioButton.this, true);
            }
        });
    }

    @Override
    public void setSelected(boolean selected) {
        if (group.isSelected(this)) {
            return;
        }
        super.setSelected(selected);
    }
}
ログイン後にコピー

以上がJTable グループにラジオ ボタンを追加するときに排他性を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート