JTableコンポーネントが作成されると、デフォルトでセル編集が有効になります。ユーザーがJTableのコンテンツを編集できないようにするにはどうすればよいですか?
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());
次のコードを使用してJTableを作成できます。
JTable jTable = new JTable() {
private static final long serialVersionUID = 1L;
public boolean isCellEditable(int row, int column) {
return false;
};
};
基本的にここで行っていることは、isCellEditable
をオーバーライドし、常にfalseを返すことです。これにより、編集不可のJTabelが作成されます。
myTable.setDefaultEditor(Object.class, null);
簡単に試してみましたか:
JTable table = new JTable();
table.setEnabled(false);
JComponent.setEnabled(boolean) について:
このコンポーネントを有効にするかどうかを設定します。有効になっているコンポーネントはユーザー入力に応答しますが、有効になっていないコンポーネントはユーザー入力に応答できません。一部のコンポーネントは、入力を受け付けられないというフィードバックをユーザーに提供するために、無効にされたときに視覚表現を変更する場合があります。
JTableに関しては、視覚的なフィードバックをまったく提供していないようです。列ヘッダーをクリックすることができるという利点があります。そして、私の実装では、アプリケーションはセルの内容を変更できます。
こんにちはJavaに取り組んでいます。NetBeansの下に最初の2つの可能性があります。コードをカスタマイズして次のように作成します。
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);
私の別の方法は、テーブルモデルのインスタンスを作成することです。これは2番目の方法です。
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);
これが私にとってうまくいくことを楽しんでください。私がやりたいのは、私がずっと早く助けられたからです。
私は遅れていることは知っていますが、誰かがこれを利用してくれることを願っています。次のようにマウスリスナーを簡単に追加できます。
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条件を削除して、すべての列でこれを機能させることができます。
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」では、特定の列のユーザー編集を有効または無効にすることができます。この場合、column = 11を有効にし、残りの列を無効にします
NetBeansでは、テーブルを右クリックしてテーブルの内容をクリックし、列タブに移動して[編集可能]チェックボックスをオフにします。ご挨拶!!