0

5列のテーブルを作成しました。列 2 と 3 のすべてのセルが編集可能です。列 2 にはデフォルトの JTextField エディターがあり、数値 (0、1、2、3、...、9) の値のみを受け取る必要があります。アプリケーションが初めて読み込まれると、列 2 の最初のセルが自動的に選択され、以下のようにテーブルがフォーカスされます。

public void initFocus(){
    SwingUtilities.invokeLater(new Runnable() 
    {
        public void run() {
           itemsTable.changeSelection(0,2,false,false);
           itemsTable.requestFocusInWindow();
        }
    });
}

私が達成したいことは以下の通りです:

  1. 数字 (0 ~ 9) のセルを押すと、新しい値に編集されます。
  2. Enter キーを押すと、列の次のセルが編集可能になります。
  3. ユーザーが列の最後のセルをリッチにして編集し、Enter キーを押すと、列の最初のセルが再び編集できるようになります。

私は表でこれを試しましたが、結果はOKではありません: これらの目標を達成する方法を知っている人はいますか? 単純なテーブルの例をいただければ幸いです。前もって感謝します

itemsTableModel = new DefaultTableModel(){
            @Override
            public boolean isCellEditable(int row, int column) {
                return column == 2 || column==3;
            }
        };
itemsTableModel.setColumnIdentifiers(new Object[]{"Product", "ItemCode","QTY","Date", "ProductId"});

itemsTable = new JTable(itemsTableModel){
       public void changeSelection(int row, int column, boolean toggle, boolean extend)
       {
                super.changeSelection(row, column, toggle, extend);
                if(column==2 && row != -1)
                {

                    if (editCellAt(row, column))
                    {
                        Component editor = getEditorComponent();
                        editor.requestFocusInWindow();
                        ((JTextComponent)editor).selectAll();
                    }

                    if(isEditing() && row == itemsTable.getRowCount()-1) 
                    {
                        super.changeSelection(0, 2, toggle, extend);
                        Component component = itemsTable.getCellEditor(0,2).getTableCellEditorComponent(itemsTable,getValueAt(row, column),true,row,column);
                        component.requestFocusInWindow();
                        ((WebTextField)component).selectAll();
                    }
                 }
       }
  };
itemsTable.setDefaultRenderer(Object.class, retrieveItemsTableCellRenderer());
itemsTable.setCellSelectionEnabled(true);
4

0 に答える 0