Java Swingでアイテムを動的に作成したり、ユーザーアクションを許可/禁止したりする
-
11-10-2019 - |
質問
ユーザー、ロール、権限を含むデータベースがあります。これをフロントエンド (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);
}
}
}
所属していません StackOverflow