Wyłącz edycję użytkownika w JTable

Po utworzeniu komponentu JTable domyślnie włączona jest edycja komórki. Jak mogę uniemożliwić użytkownikowi edycję zawartości JTable?

Author: AsksAnyway, 2012-03-29

8 answers

JTable używa obiektu AbstractTableModel. To jest rzecz, którą PRZEKAZUJESZ do konstruktora JTable. Możesz napisać swój własny AbstractTableModel w następujący sposób

public class MyTableModel extends AbstractTableModel {

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

}

A następnie zainicjalizuj JTable jako

JTable myTable = new JTable(new MyTableModel());
 37
Author: richard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-29 05:25:35

Możesz utworzyć JTable używając następującego kodu:

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

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

Zasadniczo to, co tutaj robimy, jest nadrzędne isCellEditable i zawsze zwraca z niego fałsz. Spowoduje to, że JTabel nie będzie edytowany.

 41
Author: Rahul Borkar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-28 04:49:20
myTable.setDefaultEditor(Object.class, null);
 12
Author: Aïssa Ghouti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-10 23:37:14

Cześć dużo pracuję na Javie więc dam ci mój sposób: Są dwie możliwości, pierwsza pod netbeans. Przejdź do personalizacji kodu i zrób to tak:

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);

Moim drugim sposobem jest zrobienie instancji modelu tabelkowego. To jest druga droga:

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);

Ciesz się, że to działa dobrze dla mnie. Chcę wam tylko pomóc, bo pomogli mi dużo wcześniej.

 4
Author: Mohammed Housseyn Taleb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-31 18:16:49

Czy próbowałeś po prostu:

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

O JComponent.setEnabled (boolean) {[5] } mówi:

Ustawia, czy ten komponent jest włączony. Komponent, który jest włączony, może odpowiedzieć na dane wejściowe użytkownika, podczas gdy komponent, który nie jest włączony, nie może odpowiedzieć na dane wejściowe użytkownika. Niektóre komponenty mogą zmieniać swoją wizualną reprezentację, gdy są wyłączone, aby przekazać użytkownikowi informację zwrotną, której nie może wprowadzić.

Jeśli chodzi o JTable to nie wydaje się aby dać jakiekolwiek wizualne opinie w ogóle. Z plusem, że nadal można klikać na nagłówki kolumn. A w mojej implementacji aplikacja może nadal zmieniać zawartość komórek.

 3
Author: brat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-20 01:55:39
        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);
 0
Author: Kavitha yadav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-05 12:15:31

Dobrze na netbeans można kliknąć prawym przyciskiem myszy na tabeli i kliknij na zawartość tabeli, a następnie przejść do zakładki kolumna i odznaczyć pole wyboru "edytowalny". Pozdrawiam!!

 0
Author: Yahrs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-18 16:08:52

Wiem, że się spóźniłem, ale mam nadzieję, że ktoś to wykorzysta. Możesz w prosty sposób dodać słuchacza myszy w ten sposób:

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 );
        }
    }
});

Ten kod zapobiega edycji kolumn indeksów 1 i 2 możesz usunąć warunek if, aby to działało dla wszystkich kolumn.

 0
Author: Sparks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-15 14:56:39