Проблемы Java JTable - PullRequest
       22

Проблемы Java JTable

0 голосов
/ 19 февраля 2011

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

Короче говоря, мне нужно создать JDialog, который встраивает JTable. Этот JTable должен быть динамическим в отношении количества столбцов. Кроме того, я хотел бы, чтобы первые две строки JTable имели комбо-боксы в каждой из своих ячеек. Все строки один имеют одно и то же поле со списком, а вторая строка имеют одно и то же поле со списком, отличное от первого. Оттуда я просто заполняю статические текстовые данные для заданного количества других строк. Поэтому таблица должна иметь вид:

комбо, комбо, комбо, комбо, ...
комбо, комбо, комбо, комбо, ...
текст, текст, текст, текст, ...

У меня много проблем: а) сделать динамически динамический номер столбца (это будет зависеть от переданного массива) и б) сделать комбо-боксы только из первых двух строк - единственный способ найти где-либо - создать целый столбец поля со списком.

Если это вообще поможет, я использую IDE Netbeans. Заранее большое спасибо за ваше время, и если понадобятся какие-либо дополнительные знания, просто дайте мне знать.

Ответы [ 3 ]

1 голос
/ 19 февраля 2011

как я могу вернуть TableCellEditor, возвращающий JComboBox?

import java.awt.*;
import java.awt.event.*;
import java.util.List;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.table.*;

public class TableComboBoxByRow extends JFrame
{
    List<TableCellEditor> editors = new ArrayList<TableCellEditor>(3);

    public TableComboBoxByRow()
    {
        // Create the editors to be used for each row

        String[] items1 = { "Red", "Blue", "Green" };
        JComboBox comboBox1 = new JComboBox( items1 );
        DefaultCellEditor dce1 = new DefaultCellEditor( comboBox1 );
        editors.add( dce1 );

        String[] items2 = { "Circle", "Square", "Triangle" };
        JComboBox comboBox2 = new JComboBox( items2 );
        DefaultCellEditor dce2 = new DefaultCellEditor( comboBox2 );
        editors.add( dce2 );

        String[] items3 = { "Apple", "Orange", "Banana" };
        JComboBox comboBox3 = new JComboBox( items3 );
        DefaultCellEditor dce3 = new DefaultCellEditor( comboBox3 );
        editors.add( dce3 );

        //  Create the table with default data

        Object[][] data =
        {
            {"Color", "Red"},
            {"Shape", "Square"},
            {"Fruit", "Banana"},
            {"Plain", "Text"}
        };
        String[] columnNames = {"Type","Value"};
        DefaultTableModel model = new DefaultTableModel(data, columnNames);
        JTable table = new JTable(model)
        {
            //  Determine editor to be used by row
            public TableCellEditor getCellEditor(int row, int column)
            {
                int modelColumn = convertColumnIndexToModel( column );

                if (modelColumn == 1 && row < 3)
                    return editors.get(row);
                else
                    return super.getCellEditor(row, column);
            }
        };

        JScrollPane scrollPane = new JScrollPane( table );
        getContentPane().add( scrollPane );
    }

    public static void main(String[] args)
    {
        TableComboBoxByRow frame = new TableComboBoxByRow();
        frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
        frame.pack();
        frame.setVisible(true);
    }
}
1 голос
/ 19 февраля 2011

Для динамического числа столбцов это определяется TableModel вашего JTable.Используйте DefaultTableModel с соответствующим количеством столбцов или, что еще лучше, реализуйте свою собственную табличную модель, расширяя AbstractTableModel , и реализуйте getColumnCount() на основе массива, содержащего ваши данные.

Для комбо-части, я думаю, вы хотите использовать комбо для редактирования данных в таблице.Вам необходимо расширить JTable и переопределить метод getCellEditor () , чтобы вернуть TableCellEditor, возвращающий JComboBox, если строка равна 0 или 1. И вы можете вернуть super.getCellEditor(row, column), если строка больше 1.

Вы также должны прочитать Учебник Java по JTable , в котором есть разделы обо всем, что вы хотите сделать.

0 голосов
/ 19 февраля 2011

Эта ветка может помочь: Транспонировать (повернуть) JTable

...