vishal.v.patil Ответов: 5

Запретить редактирование ячейки в jtable, выполните следующие действия во время выполнения.


У меня есть редактируемая таблица, в ячейке таблицы, когда я ставлю значение, то оно не получает значение через метод getValueAt (), когда редактирование ячейки все еще включено....
он получает значение только через getValueAt (), когда редактирование ячейки отключено..

Для этого я хочу автоматически отключить редактирование ячейки JTable...

Спасибо с уважением..
Вишал!

5 Ответов

Рейтинг:
37

Shubhashish_Mandal

Вы можете использовать табличную модель.

Подобный этому

public class MyModel extends AbstractTableModel{

}

Затем установите модель в свой JTable.
JTable myTable = new JTable();
myTable.setModel(new MyModel());


vishal.v.patil

но это приведет к потере моих данных..
мне нужны мои данные также из ячеек...,,

Shubhashish_Mandal

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

vishal.v.patil

если у нас уже есть мои данные в таблице, то после того, как я применю tablemodel во время выполнения, может ли он работать нормально!!??
может быть, он потерял данные или нет??

Shubhashish_Mandal

вы должны добавить данные через модель в свою таблицу.

vishal.v.patil

но я хочу заполнить данные от пользователя, и после этого я хочу отключить редактирование из таблицы по событию нажатия кнопки!!

Рейтинг:
35

Shubhashish_Mandal

Вот еще один способ..

JTable table = new JTable(){  
       public boolean isCellEditable(int row,int column){  
         Object o = getValueAt(row,column);  
         if() return false;  
         return true;  
       }  
     }; 


vishal.v.patil

он инициализирует объект таблицы, а затем завершает работу с ошибкой...
это создаст новый объект таблицы..

Рейтинг:
26

Shubhashish_Mandal

Его работа, как вы хотите. После нажатия кнопки отключить редактирование ячеек прекратится.

public class TestTable {

    boolean flag = false;

    public void create() {
        JTable table = new JTable(2, 2) {

            public boolean isCellEditable(int row, int column) {
                if (flag) {
                    return false;
                }
                return true;
            }
        };
        JFrame f = new JFrame();
        JButton button = new JButton("Disable");
        button.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                flag = true;
            }
        });
        f.setLayout(new FlowLayout());
        f.add(new JScrollPane(table));
        f.add(button);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                new TestTable().create();
            }
        });
    }


vishal.v.patil

импорт java.awt.*;
импорт java.awt.event.*;
импорт java.util.Календарь;
импорт Java.текст.Класса simpledateformat;

импорт javax.swing.*;
импорт javax.swing.event.PopupMenuListener;
импорт javax.swing.event.PopupMenuEvent;
импорт пакета javax.качели.plafбыл.ComboBoxUI;
импорт пакета javax.качели.plafбыл.основные.ComboPopup;
импорт javax.swing.plaf.metal.MetalComboBoxUI;
импорт пакета javax.качели.границы.Границы;
импорт javax.swing.border.EtchedBorder;
импорт javax.swing.border.EmptyBorder;

импортировать com.солнце.Ява.качели.plafбыл.мотив.MotifComboBoxUI;
импорт com.sun.java.swing.plaf.windows.WindowsComboBoxUI;
тестовая таблица открытого класса {

флаг = ложь;

общественного недействительными создать() {
окончательный jtable, выполните следующие действия таблица = новый jtable, выполните следующие действия(2, 2) {

public boolean isCellEditable(int строка, int столбец) {
если (флаг) {
возвращать false;
}
вернуть true;
}
};
JFrame f = новый JFrame();
Кнопка JButton = новая кнопка JButton("отключить");
button.addActionListener(новый ActionListener() {

общественного недействительными событий actionperformed(типа actionevent е) {
флаг = true;
}
});
JButton button1 = новый JButton("показать");
button1.addActionListener(новый ActionListener() {

общественного недействительными событий actionperformed(типа actionevent е) {
for(int i=0;i<2;i++)
for(int j=0;j<2;j++)
Системы.из.код println("значение по ТБ("+я+","+Дж+")"+стол.getModel().getValueAt(I и J));
}
});
f.setLayout(новый FlowLayout());
f.добавить(новый JScrollPane(таблица));
f.добавить(кнопка); f.добавить(кнопка 1);
Ф.setDefaultCloseOperation(форму.EXIT_ON_CLOSE);
Ф.функцию setvisible(истина);
}

публичный статический пустота главный(строка[] аргументы) {
SwingUtilities.invokeLater(новый запускаемый() {

общественного недействительными Run() {
новая тестовая таблица().create();
}
});
}
}

Теперь смотрите на проблему...!!

Shubhashish_Mandal

в чем же проблема ?

vishal.v.patil

когда мы фокусируемся на конкретной ячейке, это значение не печатается!!
вот в чем проблема....

vishal.v.patil

если я хочу, чтобы эти только одна кнопка она не работает..!
Как я это делаю..

Рейтинг:
16

Shubhashish_Mandal

Вот вам и решение...

table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);


vishal.v.patil

я очень, очень благодарен 2 u братан...!!!

такое большое спасибо..!!
>>>>Шубхашиш Мандал

Рейтинг:
1

Member 11967359

Напишите код удара в вашем конструкторе таблиц
public boolean isCellEditable(int строка, int столбец){

возвращать false;
}