2010-12-19 5 views
1

ユーザー、ロール、およびアクセス許可を含むデータベースがあります。私はこれをフロントエンド(Java Swing)にマップできるようにしたいので、アクションを実行できないユーザーはそれを見ることができません。アイテムを動的に作成する、またはJavaスイングでユーザーの操作を許可/禁止する

例:

  • 役割AddressManagerが許可create_address、edit_addressと remove_addressを有しています。
  • ユーザAにはcreate_addressとedit_addressの権限があります。
  • ユーザーBにはremove_addressが許可されています。

私はAddressManagerから役割を表すアドレスビューのため、およびAとBボタンを有効/無効にするユーザーのための3つのボタンが欲しいです。

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

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

答えて

1

あなたができることは、このようなクラスを作成し、どこにでも使用することです。 あなたの例では、新しい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); 
     } 
    } 
} 
+0

これを組成で行うことはできますか?特定のJPanelに対して、ActionContainerを追加しますか?はい、はい、はい、JpanelはJPanelsを持つことができますが、なぜこのオブジェクトはJPanel自体でなければなりませんか?それは厄介なようです(?)。 – Thufir

+0

@Thufirこのオブジェクトは、厳密にはJPanelである必要はありませんが、任意のコンテナでもよく、外部からコンテナを取ることもできます。これをJPanelにするというアイデアは、固定コンポーネントを1つのものとして使用し、すべてのボタンにアクションリスナーを一度に追加できるようにすることです。また、あなたのすべてのコンテナとその子供たちを繰り返して、そこにアクションリスナーを追加することもできますが、それは手近な作業のために過度に複雑に思えます。異なるユースケースがある場合は、コメントではなく独自の質問として投稿することができます。 –

+0

私はちょうど興味があった。私はJPanelが一般的なコンテナに好まれていると思いますが、そのような特定のクラスよりもウィジェットを想像しています... – Thufir

関連する問題