1

私はnetbeansでjavaswingsを使用しています。フォームにjtableがあり、mysqlデータベースからの値が入力されます。テーブルはユーザーが選択したテーブルに基づいて動的に変化し続けます。最後にチェックボックスの列を追加しました。これで、表示されるテーブルが何であれ、オーバーライドによって編集できる最後の列のみをセル編集機能にしました。

これで、チェックボックスの列が編集可能になりました。行に対応するチェックボックスがオンになっているときに残りの列のいくつかを編集可能にし、チェックボックスがオフになったら行を編集不可にしたいと思います。 !!

このタスクを実行するために助けが必要です。他に必要な詳細があれば、Plsは尋ねます。

前もって感謝します。

4

1 に答える 1

1

もちろん、クレオパトラは正しいです。聞き手は必要ありません。必要なのは、対象の行の最後の列が保持するブール値をモデルにチェックさせ、それをisCellEditable()値として返すことだけです。

例えば:

@SuppressWarnings("serial")
class MyTableModel extends DefaultTableModel {
   public static final String SELECT = "select";
   String tablename;

   public MyTableModel(Object[][] rowData, Object[] columnNames, String tableName) {
      super(rowData, columnNames);
      this.tablename = tableName;
   }

   @Override
   public Class<?> getColumnClass(int columnIndex) {
      if (getColumnName(columnIndex).equalsIgnoreCase(SELECT)) {
         return Boolean.class;
      }
      return super.getColumnClass(columnIndex);
   }

   @Override
   public boolean isCellEditable(int row, int col) {
      if (col == getColumnCount() - 1) 
         return true;
      else
         return ((Boolean) getValueAt(row, getColumnCount() - 1)).booleanValue();
   }

}

次の方法でテストできます。

import javax.swing.*;
import javax.swing.table.*;

public class TestBoolTableModel {
   public static final Integer[][] DATA = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 },
         { 9, 10, 11, 12 }, { 13, 14, 15, 16 } };
   public static final String[] COL_NAMES = { "One", "Two", "Three", "Four",
         MyTableModel.SELECT };

   private static void createAndShowGui() {
      Object[][] rowData = new Object[DATA.length][];
      for (int i = 0; i < rowData.length; i++) {
         rowData[i] = new Object[DATA[i].length + 1];
         for (int j = 0; j < DATA[i].length; j++) {
            rowData[i][j] = DATA[i][j];
         }
         rowData[i][DATA[i].length] = Boolean.FALSE;
      }
      MyTableModel tableModel = new MyTableModel(rowData, COL_NAMES, "My Table");

      JTable table = new JTable(tableModel);
      JScrollPane scrollPane = new JScrollPane(table);

      JFrame frame = new JFrame("TestBoolTableModel");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(scrollPane);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}
于 2013-02-19T13:26:18.843 に答える