Java >> Java-zelfstudie >  >> Java

Hoe een JComboBox aan een JTable-cel toe te voegen?

In deze zelfstudie gaan we zien hoe u een JComboBox aan een JTable-cel kunt toevoegen. JTable is een flexibele Swing-component die zeer geschikt is om gegevens in tabelvorm weer te geven. Om een ​​JComboBox aan een JTable-cel toe te voegen, herdefiniëren we de getCellEditor(…) methode van JTable. getCellEditor() methode retourneert de actieve celeditor, die nul is als de tabel niet wordt bewerkt.

Java-programma om een ​​JComboBox aan een JTable-cel toe te voegen:
import java.awt.*;
import java.util.List;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.table.*;

public class ComboBoxJTable extends JPanel
{
    List<String[]> editData = new ArrayList<String[]>(3);

    public ComboBoxJTable()
    {
        setLayout(new BorderLayout());

        // data to add to JTable cells
        editData.add(new String[]{ "Java", "PHP", "Python" });
        editData.add(new String[]{ "Red", "Green", "Blue" });
        editData.add(new String[]{ "Triangle", "Circle", "Square" });

        // create JTable with default data
        Object[][] data = {
            {"Langue", "Java"},
            {"Colour", "Blue"},
            {"Form", "Circle"},
            {"Text", "StackHowTo"}
        };
    
        String[] columns = {"Property", "Value"};

        DefaultTableModel model = new DefaultTableModel(data, columns);
        JTable table = new JTable(model)
        {
            // determine which editor to use by JTable
            public TableCellEditor getCellEditor(int row, int column)
            {
                int col = convertColumnIndexToModel(column);

                if (col == 1 && row < 3)
                {
                    JComboBox<String> cb = new JComboBox<String>(editData.get(row));
                    return new DefaultCellEditor(cb);
                }
                else
                    return super.getCellEditor(row, column);
            }
        };

        JScrollPane scroll = new JScrollPane(table);
        add(scroll);
    }

    private static void displayUI()
    {
        JFrame f = new JFrame("Add JComboBox to JTable");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new ComboBoxJTable());
        f.setSize(300, 150);
        f.setLocationByPlatform(true);
        f.setVisible(true);
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                displayUI();
            }
        });
    }
}

Uitvoer:


Java-tag