Uma tela de exemplo:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.UIManager;
@SuppressWarnings("serial")
public class TelaExemplo extends JFrame {
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
TelaExemplo tela = new TelaExemplo();
tela.setDefaultCloseOperation(EXIT_ON_CLOSE);
tela.setLocationRelativeTo(null);
tela.setVisible(true);
} catch (Throwable t) {
t.printStackTrace();
}
}
// ComboBoxModel para renderizar a lista de módulos
private class ComboBoxModelModulos extends DefaultComboBoxModel<String> {
@Override
public String getElementAt(int index) {
Modulo modulo = sistema.getModulos().get(index);
return modulo.getNome();
}
@Override
public int getSize() {
return sistema.getModulos().size();
}
}
private final Sistema sistema = new Sistema();
private JPanel panelRadios;
private JComboBox<String> comboModulos;
public TelaExemplo() {
super("Exemplo");
setMinimumSize(new Dimension(480, 320));
comboModulos = new JComboBox<>(new ComboBoxModelModulos());
comboModulos.addItemListener(event -> selecionouModulo(sistema.getModulos().get(comboModulos.getSelectedIndex())));
panelRadios = new JPanel(new GridLayout(1, 1));
JPanel panel = new JPanel();
panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
panel.setLayout(new BorderLayout());
panel.add(comboModulos, BorderLayout.NORTH);
panel.add(panelRadios, BorderLayout.CENTER);
setContentPane(panel);
}
private void selecionouModulo(Modulo modulo) {
List<Procedimento> procedimentos = modulo.getProcedimentos();
panelRadios.removeAll();
panelRadios.setLayout(new GridLayout(procedimentos.size(), 1));
ButtonGroup group = new ButtonGroup();
for (Procedimento procedimento : procedimentos) {
JRadioButton radio = new JRadioButton(procedimento.getNome());
radio.addItemListener(event -> {
if (radio.isSelected()) {
selecionouProcedimento(procedimento);
}
});
group.add(radio);
panelRadios.add(radio);
}
panelRadios.revalidate();
}
private void selecionouProcedimento(Procedimento procedimento) {
JOptionPane.showMessageDialog(this, "Selecionou: " + procedimento.getNome(), "Aviso", JOptionPane.INFORMATION_MESSAGE);
}
}
Uma classe que representa as funcionalidades do seu sistema:
import java.util.Arrays;
import java.util.List;
public class Sistema {
private List<Modulo> modulos;
public Sistema() {
Modulo modulo1 = new Modulo("ESCRITA FISCAL", // nome do módulo
new Procedimento("Revisão de Parâmetros"), // procedimento 1
new Procedimento("Importação de Perfis"), // procedimento 2
new Procedimento("Importação de XML")); // procedimento 3
Modulo modulo2 = new Modulo("FOLHA DE PAGAMENTO", // nome do módulo
new Procedimento("Revisão de Parâmetros"), // procedimento 1
new Procedimento("Cadastros"), // procedimento 2
new Procedimento("Cálculo")); // procedimento 3
modulos = Arrays.asList(modulo1, modulo2);
}
public List<Modulo> getModulos() {
return modulos;
}
}
Uma classe que representa um módulo do seu sistema:
import java.util.Arrays;
import java.util.List;
public class Modulo {
private String nome;
private List<Procedimento> procedimentos;
public Modulo(String nome, Procedimento... procedimentos) {
this.nome = nome;
this.procedimentos = Arrays.asList(procedimentos);
}
public String getNome() {
return nome;
}
public List<Procedimento> getProcedimentos() {
return procedimentos;
}
}
Uma classe que representa um procedimento de um módulo do sistema:
public class Procedimento {
private String nome;
public Procedimento(String nome) {
this.nome = nome;
}
public String getNome() {
return nome;
}
}