Невозможно редактировать, казалось бы, произвольные столбцы JTable - PullRequest
1 голос
/ 03 сентября 2010

Как гласит заголовок, у меня есть JTable, и я не могу редактировать "произвольные" столбцы.У меня есть 4 столбца, и только первый столбец доступен для редактирования.В первом столбце есть файлы и специальный редактор, в следующих двух столбцах - строки, а в последнем столбце - целые числа.Я использую собственную модель и возвращаю true из метода isCellEditable.Конечно, сначала я обратился за помощью к нескольким веб-сайтам, но не смог найти ничего, что могло бы помочь.Я использовал исходный код Java, чтобы переопределить несколько JTable методов и вставить операторы печати.В частности, я обнаружил, что table.editCellAt (row, col) всегда возвращает false, поскольку компонент редактирования, возвращаемый из редактора ячеек, всегда равен нулю.Поэтому я, естественно, попытался заменить редактор, используя table.setDefaultEditor(String.class, new MyEditor()).Странно, что НЕ работал.Все редакторы для столбцов String по-прежнему были GenericEditor, который JTable использует по умолчанию.Затем я попытался добавить редакторы в каждый столбец, выполнив следующие действия:

TableColumnModel model = table.getColumnModel();
for(int i = 1; i < model.getColumnCount(); i++){
    model.getColumn(i).setCellEditor(new MyEditor());
}

Обратите внимание, что i начинается с 1, поскольку в первом столбце уже есть соответствующий редактор.На данный момент у меня нет идей, поэтому я обратился к добрым людям в Stack Overflow за помощью.

Редактировать: я использую DefaultTableModel, я просто переопределил isCellEditable, чтобы убедиться, что он всегдавозвращает true (даже если DefaultTableModel должно делать это по умолчанию).Я сделал это, чтобы уменьшить количество бесполезных, расточительных ответов отладки.Кроме того, тот факт, что один столбец является редактируемым, а другие нет, может указывать на то, что проблема в другом месте.

Редактировать: Возможно, проблема связана с созданием столбца.Профессор предложил изменить setAutoCreateColumnsFromModel, и это, похоже, решило проблему.

Ответы [ 3 ]

1 голос
/ 03 сентября 2010

Требуется всего 5 строк "пользовательского кода", чтобы проверить использование JTable. Остальная часть кода является шаблоном для любого SSCCE, который вы можете создать в будущем.

import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;

public class SSCCE extends JPanel
{
    public SSCCE()
    {
        DefaultTableModel model = new DefaultTableModel(5, 3);
        JTable table = new JTable( model );
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        JScrollPane scrollPane = new JScrollPane( table );
        add( scrollPane );
    }

    private static void createAndShowUI()
    {
        JFrame frame = new JFrame("Basic SSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new SSCCE() );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}
0 голосов
/ 03 сентября 2010

Казалось бы, проблема связана с созданием столбца.Профессор предложил изменить setAutoCreateColumnsFromModel, и это, похоже, решило проблему.

0 голосов
/ 03 сентября 2010

Я использую DefaultTableModel, я просто переопределил isCellEditable, чтобы он всегда возвращал значение true (даже если DefaultTableModel должен делать это по умолчанию). Я сделал это, чтобы уменьшить количество бесполезных, расточительных ответов отладки. Кроме того, тот факт, что один столбец является редактируемым, а другие нет, может указывать на проблему в другом месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...