Динамически создавать элементы или разрешить / запретить действия пользователя в Java Swing

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

Вопрос

У меня есть база данных, которая содержит пользователей, роли и разрешения. Я хочу иметь возможность сопоставить это с передней частью (java swing), чтобы пользователь, который не может сделать действие, не видит этого.

Пример:

  • Роль AddressManager имеет разрешения create_address, edit_address и remove_address.
  • Пользователь A имеет разрешения create_address и edit_address.
  • У пользователя B есть разрешение remove_address.

Я хочу, чтобы три кнопки для представления адреса, которые представляют роли от AddressManager, и для пользователей A и B, чтобы включить / отключить кнопки.

Вопрос: Есть ли простой способ отображения значений таблицы баз данных для компонентов качания (кнопки)?

Одним из способов является назначение включения/отключения вручную каждому отдельному компоненту, но это непрактично, если в приложении есть 40 диалогов с примерно 200 компонентами, которые должны иметь разрешение.

Это было полезно?

Решение

Что вы можете сделать, так это написать такой класс и использовать его везде. В вашем примере вы добавите его с новым ActionContainer («Адрес»); И он создаст кнопку 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