繁体   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