簡體   English   中英

在Java swing中動態創建項目或允許/禁止用戶操作

[英]Dynamically create Items or allow / disallow user actions in java swing

我有一個包含用戶,角色和權限的數據庫。 我希望能夠將其映射到前端(Java Swing),以便無法執行操作的用戶看不到它。

一個例子:

  • 角色AddressManager擁有create_address,edit_address和remove_address的權限。
  • 用戶A擁有create_address和edit_address的權限。
  • 用戶B具有權限remove_address。

我想要三個用於地址視圖的按鈕,分別代表AddressManager中的角色,以及用於用戶A和B的啟用/禁用按鈕。

問題:是否有任何簡單的方法將數據庫表值映射到Swing組件(按鈕)?

一種方法是手動為每個組件分配啟用/禁用,但是如果應用程序中有40個對話框且必須擁有大約200個組件,這是不切實際的。

您可以做的是編寫一個這樣的類,並在所有地方使用它。 在您的示例中,您將添加新的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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM