Java Swingでアイテムを動的に作成したり、ユーザーアクションを許可/禁止したりする

StackOverflow https://stackoverflow.com/questions/4485204

質問

ユーザー、ロール、権限を含むデータベースがあります。これをフロントエンド (Java Swing) にマップできるようにして、アクションを実行できないユーザーにはそれが表示されないようにしたいと考えています。

例:

  • ロールアドレスマネージャーには、権限create_address、edit_address、remove_addressがあります。
  • ユーザー A には、create_address および edit_address 権限があります。
  • ユーザー B には、remove_address 権限があります。

AddressManager からのロールを表すアドレス ビューの 3 つのボタンと、ユーザー A と B がボタンを有効/無効にするボタンが必要です。

質問:データベーステーブルの値をSwingコンポーネント(ボタン)にマッピングする簡単な方法はありますか?

1 つの方法は、すべてのコンポーネントに手動で有効/無効を割り当てることですが、アプリケーション内に 40 個のダイアログがあり、許可が必要な約 200 個のコンポーネントがある場合、これは現実的ではありません。

役に立ちましたか?

解決

あなたができることは、このようなクラスを作成し、それをあらゆる場所で使用することです。あなたの例では、 new ActionContainer("adress"); を使用して追加します。ユーザーが一致する権限を持っている場合に有効になる create_address、edit_address、delete_address ボタンが作成されます。

package de.steamnet.samples;

// This class is a Panel that renders buttons based on rights.

import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JPanel;

public class ActionContainer extends JPanel {
    List<JButton> buttons = new ArrayList<JButton>();

    public ActionContainer(String rightBase) {
        List<String> rights = database.getRightsStartingWith(rightBase);
        for(String nextRight : rights) {
            JButton next = new JButton(nextRight);
            buttons.add(next);
            if(user.hasRight(nextRight)) {
                next.setEnabled(true);
            } else {
                next.setEnabled(false);
            }
            add(next);
        }
    }

    public void addActionListener(ActionListener al) {
        for(JButton next: buttons) {
            next.addActionListener(al);
        }
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top