Ingineria Sistemelor de Programe

Documentatie suplimentara, ISP, Seria B si SM

View on GitHub

Documentație Java Swing: JList, JComboBox și JRadioButton

Cuprins

  1. Introducere
  2. JList
  3. JComboBox
  4. JRadioButton
  5. Utilizarea componentelor împreună

Introducere

Java Swing oferă mai multe componente pentru afișarea și selectarea opțiunilor. În această documentație, vom explora trei dintre cele mai utilizate:

JList

JList este o componentă care afișează o listă de elemente, permițând utilizatorului să selecteze unul sau mai multe dintre acestea.

Crearea unui JList

// Crearea unui JList simplu
JList<String> lista = new JList<>();

// Crearea unui JList cu un vector de elemente
String[] elemente = {"Element 1", "Element 2", "Element 3"};
JList<String> lista = new JList<>(elemente);

// Crearea unui JList cu un model DefaultListModel
DefaultListModel<String> model = new DefaultListModel<>();
model.addElement("Element 1");
model.addElement("Element 2");
model.addElement("Element 3");
JList<String> lista = new JList<>(model);

Adăugarea elementelor

Pentru a gestiona dinamic elementele unui JList, este recomandat să folosiți un DefaultListModel:

DefaultListModel<String> model = new DefaultListModel<>();
JList<String> lista = new JList<>(model);

// Adăugarea elementelor
model.addElement("Element 1");
model.addElement("Element 2");

// Inserarea unui element la un index specific
model.add(1, "Element nou");

// Eliminarea unui element după index
model.remove(0);

// Eliminarea unui element specific
model.removeElement("Element 2");

// Înlocuirea unui element
model.set(0, "Element înlocuit");

Gestionarea selecțiilor

JList permite diferite moduri de selecție:

// Setarea modului de selecție
lista.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // Doar un element
lista.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); // Interval continuu
lista.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); // Mai multe intervale (implicit)

// Obținerea elementelor selectate
int[] indici = lista.getSelectedIndices(); // Obține indicii selectați
List<String> elementeSelectate = lista.getSelectedValuesList(); // Obține valorile selectate

Ascultători de evenimente JList

Pentru a reacționa la selectarea elementelor din JList:

lista.addListSelectionListener(new ListSelectionListener() {
    @Override
    public void valueChanged(ListSelectionEvent e) {
        // Verificăm dacă evenimentul este final (nu este în desfășurare)
        if (!e.getValueIsAdjusting()) {
            String elementSelectat = lista.getSelectedValue();
            System.out.println("Element selectat: " + elementSelectat);
        }
    }
});

Exemplu complet JList

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;

public class ExempluJList {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Exemplu JList");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 200);
        
        DefaultListModel<String> model = new DefaultListModel<>();
        model.addElement("București");
        model.addElement("Cluj-Napoca");
        model.addElement("Timișoara");
        model.addElement("Iași");
        model.addElement("Constanța");
        
        JList<String> lista = new JList<>(model);
        lista.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        JScrollPane scrollPane = new JScrollPane(lista);
        
        lista.addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent e) {
                if (!e.getValueIsAdjusting()) {
                    JOptionPane.showMessageDialog(frame, 
                            "Ați selectat: " + lista.getSelectedValue());
                }
            }
        });
        
        frame.add(scrollPane, BorderLayout.CENTER);
        frame.setVisible(true);
    }
}

JComboBox

JComboBox este o componentă care combină un câmp text și o listă drop-down, permițând selectarea unui singur element din listă.

Crearea unui JComboBox

// Crearea unui JComboBox gol
JComboBox<String> combo = new JComboBox<>();

// Crearea unui JComboBox cu un vector de elemente
String[] elemente = {"Element 1", "Element 2", "Element 3"};
JComboBox<String> combo = new JComboBox<>(elemente);

// Crearea unui JComboBox cu un model DefaultComboBoxModel
DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
model.addElement("Element 1");
model.addElement("Element 2");
JComboBox<String> combo = new JComboBox<>(model);

Adăugarea și eliminarea elementelor

JComboBox<String> combo = new JComboBox<>();

// Adăugarea elementelor
combo.addItem("Element 1");
combo.addItem("Element 2");

// Inserarea unui element la un index specific
combo.insertItemAt("Element nou", 1);

// Eliminarea unui element după index
combo.removeItemAt(0);

// Eliminarea unui element specific
combo.removeItem("Element 2");

Gestionarea selecțiilor ComboBox

// Selectarea unui element după index
combo.setSelectedIndex(1);

// Selectarea unui element după valoare
combo.setSelectedItem("Element 2");

// Obținerea elementului selectat
String elementSelectat = (String) combo.getSelectedItem();
int indexSelectat = combo.getSelectedIndex();

Ascultători de evenimente ComboBox

combo.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        String elementSelectat = (String) combo.getSelectedItem();
        System.out.println("Element selectat: " + elementSelectat);
    }
});

Exemplu complet ComboBox

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ExempluJComboBox {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Exemplu JComboBox");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 150);
        frame.setLayout(new FlowLayout());
        
        String[] limbaje = {"Java", "Python", "C++", "JavaScript", "C#"};
        JComboBox<String> combo = new JComboBox<>(limbaje);
        
        JLabel rezultat = new JLabel("Niciun limbaj selectat");
        
        combo.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                rezultat.setText("Limbaj selectat: " + combo.getSelectedItem());
            }
        });
        
        frame.add(new JLabel("Selectați un limbaj de programare:"));
        frame.add(combo);
        frame.add(rezultat);
        
        frame.setVisible(true);
    }
}

JRadioButton

JRadioButton permite utilizatorului să selecteze o singură opțiune dintr-un grup de opțiuni.

Crearea unui JRadioButton

// Crearea butoanelor radio
JRadioButton radioButon1 = new JRadioButton("Opțiunea 1");
JRadioButton radioButon2 = new JRadioButton("Opțiunea 2");
JRadioButton radioButon3 = new JRadioButton("Opțiunea 3");

// Setarea unui buton ca fiind selectat implicit
radioButon1.setSelected(true);

Gruparea butoanelor radio

Pentru a asigura selecția exclusivă (doar un buton poate fi selectat la un moment dat), trebuie să adăugați butoanele radio într-un ButtonGroup:

// Crearea unui grup de butoane
ButtonGroup grup = new ButtonGroup();

// Adăugarea butoanelor în grup
grup.add(radioButon1);
grup.add(radioButon2);
grup.add(radioButon3);

Gestionarea selecțiilor RadioButton

// Verificarea dacă un buton este selectat
boolean esteSelectat = radioButon1.isSelected();

// Setarea unui buton ca fiind selectat
radioButon2.setSelected(true);

Ascultători de evenimente RadioButton

radioButon1.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("Opțiunea 1 a fost selectată");
    }
});

Exemplu complet RadioButton

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ExempluJRadioButton {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Exemplu JRadioButton");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 200);
        frame.setLayout(new FlowLayout());
        
        // Crearea butoanelor radio
        JRadioButton radioMasculin = new JRadioButton("Masculin");
        JRadioButton radioFeminin = new JRadioButton("Feminin");
        JRadioButton radioAltul = new JRadioButton("Altul");
        
        // Setarea unui buton ca fiind selectat implicit
        radioMasculin.setSelected(true);
        
        // Gruparea butoanelor radio
        ButtonGroup grupGen = new ButtonGroup();
        grupGen.add(radioMasculin);
        grupGen.add(radioFeminin);
        grupGen.add(radioAltul);
        
        // Crearea unui panou pentru afișarea rezultatului
        JLabel rezultat = new JLabel("Gen selectat: Masculin");
        
        // Adăugarea ascultătorilor de evenimente
        ActionListener listener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JRadioButton buton = (JRadioButton) e.getSource();
                rezultat.setText("Gen selectat: " + buton.getText());
            }
        };
        
        radioMasculin.addActionListener(listener);
        radioFeminin.addActionListener(listener);
        radioAltul.addActionListener(listener);
        
        // Adăugarea componentelor în frame
        JPanel panel = new JPanel();
        panel.setBorder(BorderFactory.createTitledBorder("Selectați genul:"));
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        panel.add(radioMasculin);
        panel.add(radioFeminin);
        panel.add(radioAltul);
        
        frame.add(panel);
        frame.add(rezultat);
        
        frame.setVisible(true);
    }
}

Utilizarea componentelor împreună

Aceste componente pot fi utilizate împreună pentru a crea interfețe complexe. Iată un exemplu care combină toate cele trei componente:

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ComponenteCombinate {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Formular de comandă");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 400);
        frame.setLayout(new BorderLayout());
        
        // Panou pentru produse (JList)
        DefaultListModel<String> modelProduse = new DefaultListModel<>();
        modelProduse.addElement("Laptop");
        modelProduse.addElement("Smartphone");
        modelProduse.addElement("Tabletă");
        modelProduse.addElement("Monitor");
        modelProduse.addElement("Imprimantă");
        
        JList<String> listaProduse = new JList<>(modelProduse);
        listaProduse.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
        JScrollPane scrollPane = new JScrollPane(listaProduse);
        
        // Panou pentru metoda de plată (JRadioButton)
        JPanel panouPlata = new JPanel();
        panouPlata.setBorder(BorderFactory.createTitledBorder("Metoda de plată:"));
        panouPlata.setLayout(new BoxLayout(panouPlata, BoxLayout.Y_AXIS));
        
        JRadioButton radioCard = new JRadioButton("Card");
        JRadioButton radioCash = new JRadioButton("Numerar");
        JRadioButton radioTransfer = new JRadioButton("Transfer bancar");
        
        ButtonGroup grupPlata = new ButtonGroup();
        grupPlata.add(radioCard);
        grupPlata.add(radioCash);
        grupPlata.add(radioTransfer);
        radioCard.setSelected(true);
        
        panouPlata.add(radioCard);
        panouPlata.add(radioCash);
        panouPlata.add(radioTransfer);
        
        // Panou pentru livrare (JComboBox)
        JPanel panouLivrare = new JPanel();
        panouLivrare.setBorder(BorderFactory.createTitledBorder("Metoda de livrare:"));
        
        String[] metode = {"Curier standard", "Curier rapid", "Ridicare personală"};
        JComboBox<String> comboLivrare = new JComboBox<>(metode);
        panouLivrare.add(comboLivrare);
        
        // Panou pentru opțiuni și rezultat
        JPanel panouOptiuni = new JPanel(new GridLayout(2, 1));
        panouOptiuni.add(panouPlata);
        panouOptiuni.add(panouLivrare);
        
        JTextArea rezultat = new JTextArea(8, 30);
        rezultat.setEditable(false);
        
        // Buton pentru finalizare
        JButton butonFinalizare = new JButton("Finalizează comanda");
        butonFinalizare.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                StringBuilder sb = new StringBuilder();
                sb.append("COMANDĂ FINALIZATĂ\n\n");
                
                sb.append("Produse selectate:\n");
                for (String produs : listaProduse.getSelectedValuesList()) {
                    sb.append("- ").append(produs).append("\n");
                }
                
                sb.append("\nMetoda de plată: ");
                if (radioCard.isSelected()) sb.append("Card");
                else if (radioCash.isSelected()) sb.append("Numerar");
                else sb.append("Transfer bancar");
                
                sb.append("\nMetoda de livrare: ").append(comboLivrare.getSelectedItem());
                
                rezultat.setText(sb.toString());
            }
        });
        
        // Adăugarea componentelor în frame
        frame.add(new JLabel("Selectați produsele:"), BorderLayout.NORTH);
        frame.add(scrollPane, BorderLayout.WEST);
        frame.add(panouOptiuni, BorderLayout.EAST);
        frame.add(new JScrollPane(rezultat), BorderLayout.CENTER);
        frame.add(butonFinalizare, BorderLayout.SOUTH);
        
        frame.setVisible(true);
    }
}

img_1.png

Acest exemplu creează un formular de comandă simplu, care utilizează: