Отключить редактирование пользователя в JTable - PullRequest
26 голосов
/ 29 марта 2012

При создании компонента JTable редактирование ячейки включено по умолчанию.Как я могу запретить пользователю редактировать содержимое JTable?

Ответы [ 8 ]

43 голосов
/ 29 марта 2012

Вы можете создать JTable, используя следующий код:

    JTable jTable = new JTable() {
        private static final long serialVersionUID = 1L;

        public boolean isCellEditable(int row, int column) {                
                return false;               
        };
    };

По сути, мы делаем здесь переопределение isCellEditable и всегда возвращаем из него false.Это сделает не редактируемый JTabel.

39 голосов
/ 29 марта 2012

JTable использует объект AbstractTableModel. Это то, что вы передаете в конструктор JTable. Вы можете написать свой собственный AbstractTableModel следующим образом

public class MyTableModel extends AbstractTableModel {

      public boolean isCellEditable(int row, int column){  
          return false;  
      }

}

и затем инициализируйте ваш JTable как

JTable myTable = new JTable(new MyTableModel());
16 голосов
/ 20 апреля 2016
myTable.setDefaultEditor(Object.class, null);
5 голосов
/ 23 декабря 2014

Привет, я много работаю над Java, поэтому я дам вам свой путь: Есть две возможности, первая под netbeans. Перейдите к настройке кода и сделайте так:

JTArticleJPAddArrticle = new javax.swing.JTable();

JTArticleJPAddArrticle.setBackground(new java.awt.Color(204, 204, 255));

JTArticleJPAddArrticle.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {

},
new String [] {
    "Reference","Libellé","Marque","Prix d'achat","Prix de vente","Quantité","Total","Etat"
}
){
public boolean isCellEditable(int rowIndex, int columnIndex) {
    return false;
}
});



jScrollPane8.setViewportView(JTArticleJPAddArrticle);

Мой другой способ сделать это - создать экземпляр модели таблицы. Это второй способ:

model=new DefaultTableModel(head, 0){

    @Override
    public boolean isCellEditable(int i, int i1) {
        return false; //To change body of generated methods, choose Tools | Templates.
    }

   };
jtable.setmodel(model);

Наслаждайся, это работает хорошо для меня. Все, что я хочу сделать, это помочь вам, ребята, потому что мне помогли намного раньше.

4 голосов
/ 20 мая 2017

Вы пробовали просто:

JTable table = new JTable();
table.setEnabled(false);

О JComponent.setEnabled (логическое значение) говорит:

Устанавливает, включен ли этот компонент. Компонент, который включен, может отвечать на ввод пользователя, в то время как компонент, который не включен, не может отвечать на ввод пользователя. Некоторые компоненты могут изменять свое визуальное представление, когда они отключены, чтобы предоставить пользователю обратную связь о том, что они не могут принять ввод.

Когда дело доходит до JTable, он вообще не дает визуальной обратной связи. С привилегией все еще быть в состоянии нажать на заголовки столбцов. И в моей реализации приложение все еще может изменять содержимое ячеек.

0 голосов
/ 15 сентября 2018

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

jtable.addMouseListener( new MouseAdapter () {
    @Override
    public void mouseClicked ( MouseEvent e ) {
        columnIndex = replacedAssets.getSelectedColumn ();
        System.out.println ( "Double click on jtable" );
        if ( columnIndex == 1 || columnIndex == 2 ) {
            JOptionPane.showMessageDialog ( parent , "Editing this Field may cause error in the data." , "Error Edit Not Permitted For This Field" , JOptionPane.ERROR_MESSAGE );
        }
    }
});

этот код запрещает редактирование столбцов индексов 1 и 2, вы можете удалить условие if, чтобы это работало для всех столбцов.

0 голосов
/ 18 июля 2018

Что касается NetBeans, вы можете щелкнуть правой кнопкой мыши по таблице и щелкнуть по содержимому таблицы, затем перейти на вкладку столбца и снять флажок «Редактируемый».Привет !!

0 голосов
/ 05 марта 2018
        tm = new javax.swing.table.DefaultTableModel()
                 {
                      public Class<?> getColumnClass(int column)
                      {
                        switch(column)
                        {
                        case 0:
                          return String.class;
                        case 1:
                          return String.class;
                        case 2:
                          return String.class;
                        case 3:
                          return String.class;
                        case 4:
                          return String.class;
                        case 5:
                              return String.class;
                            case 6:
                              return String.class;
                            case 7:
                              return String.class;
                            case 8:
                              return String.class;
                            case 9:
                                  return String.class;
                                case 10:
                                  return String.class;
                                case 11:
                                    return Boolean.class;

                          default:
                            return String.class;
                        }
                      }

                      @Override
                      public boolean isCellEditable(int row, int column) {
                         /* Set the 11th column as editable and rest non-
                              editable */
                          if(column==11){
                              return true;
                          }else{
 //all other columns to false
                         return false;
                          }
                      }
                    };
    table = new javax.swing.JTable(tm);

В этом методе «isCellEditable» мы можем включать и отключать пользовательское редактирование для определенного столбца. В этом случае включите столбец = 11 и отключите остаток столбца

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