代码之家  ›  专栏  ›  技术社区  ›  Madushan Perera

JTable移动到下一个指定列被中断

  •  0
  • Madushan Perera  · 技术社区  · 7 年前

    我正试图通过下面给出的方法在所选行的表列中移动:

    按回车键 keystroke enter=keystroke.getkeystroke(keyevent.vk_enter,0); my_table.getinputmap(jtable.when_祖_focused_component).put(enter,“nextcolumn”); my_table.getActionMap().put(“nextColumn”,new abstractAction()。{ @覆盖 已执行的公共无效操作(actionEvent ae){ 如果(选中项){ //成本列 if(my_table.editchellat(my_table.getSelectedRow(),4))。{ system.out.println(“列成本编辑…”); } itemselected=false; }其他{ if(my_table.iscelleditable(my_table.getSelectedRow(),4))。{ //数量列 system.out.println(“列数量编辑…”); my_table.editchellat(my_table.getSelectedRow(),6); //从这里开始 }else if(my_table.iscelleditable(my_table.getSelectedRow(),6))。{ //自由数量列 system.out.println(“列自由数量编辑…”); my_table.editchellat(my_table.getSelectedRow(),7); }else if(my_table.iscelleditable(my_table.getSelectedRow(),7))。{ //dis%列 system.out.println(“列dis%正在编辑…); my_table.editchellat(my_table.getSelectedRow(),8); }else if(my_table.iscelleditable(my_table.getSelectedRow(),8))。{ //自由数量列 system.out.println(“列自由数量编辑…”); defaultTableModel model=(defaultTableModel)my_table.getModel(); model.addrow(new vector()); my_table.setrowselectionInterval(1,1); } } } })(二)

    但当我按Enterkey atqty column时,它不会移动到下一个指定的free_qty column

    任何建议都是可以理解的。

    更新

    完整的可编译示例

    。/**
    *
    *@作者马都山
    */
    导入java.awt.borderlayout;
    导入java.awt.event.actionEvent;
    导入java.awt.event.keyevent;
    导入java.util.vector;
    导入javax.swing.abstractAction;
    
    导入javax.swing.jframe;
    导入javax.swing.jscrollpane;
    导入javax.swing.jtable;
    导入javax.swing.keystroke;
    导入javax.swing.table.defaultTableModel;
    
    //双击要启动的代码列
    公共类jTableCreatingDemo{
    
    private static boolean itemselected=true;
    
    公共静态void main(字符串args[]){
    jframe frame=new jframe();
    frame.setDefaultCloseOperation(jframe.exit在关闭时退出);
    
    jtable table=new jtable();
    table.setModel(新的defaultTableModel(
    新建对象[][]{
    _1,“PR000003”,“样品项目”,“克”,0.00,0,0,0.0,0.00,0.00_
    },请
    新字符串[]{
    “”,“代码”,“名称”,“单位”,“成本”,“上一个”。余额、“数量”、“自由数量”、“折扣百分比”、“折扣金额”、“金额”
    }
    ){
    布尔值[]Canedit=新建布尔值[]{
    真、真、假、假、真、假、真、真、真、真、真、假
    }(二)
    
    公共布尔不可分类(int rowindex,int columnindex){
    return canedit[列索引];
    }
    })(二)
    
    keystroke enter=keystroke.getkeystroke(keyevent.vk_enter,0);
    table.getinputmap(jtable.when ou ancestor ou focused ou component).put(enter,“nextcolumn”);
    
    table.getActionMap().put(“nextColumn”,new abstractAction()。{
    
    @覆盖
    已执行的公共无效操作(actionEvent ae){
    
    如果(选中项){
    //成本列
    if(Table.EditCellAt(Table.GetSelectedRow(),4))。{
    system.out.println(“列成本编辑…”);
    }
    itemselected=false;
    }其他{
    
    if(table.iscelleditable(table.getSelectedRow(),4))。{
    //数量列
    system.out.println(“列数量编辑…”);
    table.editcellat(table.getSelectedRow(),6);
    }else if(table.iscelleditable(table.getSelectedRow(),6))。{
    //自由数量列
    system.out.println(“列自由数量编辑…”);
    table.editcellat(table.getSelectedRow(),7);
    }else if(table.iscelleditable(table.getSelectedRow(),7))。{
    //dis%列
    system.out.println(“列dis%正在编辑…);
    table.editcellat(table.getSelectedRow(),8);
    }else if(table.iscelleditable(table.getSelectedRow(),8))。{
    //自由数量列
    system.out.println(“列自由数量编辑…”);
    defaultTableModel模型=(defaultTableModel)table.getModel();
    model.addrow(new vector());
    表1.setrowselectionInterval(1,1);
    }
    }
    }
    })(二)
    
    jscrollpane scrollpane=新建jscrollpane(表);
    frame.add(滚动窗格,borderlayout.center);
    框架。调整尺寸(800,200);
    frame.setVisible(真);
    
    }
    }
    

    但当我按下输入钥匙在qty column它不会移动到下一个指定的free_qty column.

    enter image description here

    任何建议都是可以理解的。

    更新

    完整的可编译示例

    /**
     *
     * @author Madushan
     */
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.KeyEvent;
    import java.util.Vector;
    import javax.swing.AbstractAction;
    
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.KeyStroke;
    import javax.swing.table.DefaultTableModel;
    
    // double click on the Code column to start
    public class JTableCreatingDemo {
    
        private static boolean itemSelected = true;
    
        public static void main(String args[]) {
            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            JTable table = new JTable();
            table.setModel(new DefaultTableModel(
                    new Object[][]{
                        {1, "PR000003", "Sample Item", "Grams", 0.00, 0, 0, 0, 0.0, 0.00, 0.00}
                    },
                    new String[]{
                        "#", "Code", "Name", "Unit", "Cost", "Prev. Bal.", "Qty", "Free Qty", "Dis %", "Dis amount", "Amount"
                    }
            ) {
                boolean[] canEdit = new boolean[]{
                    true, true, false, false, true, false, true, true, true, true, false
                };
    
                public boolean isCellEditable(int rowIndex, int columnIndex) {
                    return canEdit[columnIndex];
                }
            });
    
            KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
            table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(enter, "nextColumn");
    
            table.getActionMap().put("nextColumn", new AbstractAction() {
    
                @Override
                public void actionPerformed(ActionEvent ae) {
    
                    if (itemSelected) {
                        //cost column
                        if (table.editCellAt(table.getSelectedRow(), 4)) {
                            System.out.println("column cost editing...");
                        }
                        itemSelected = false;
                    } else {
    
                        if (table.isCellEditable(table.getSelectedRow(), 4)) {
                            //qty column 
                            System.out.println("column qty editing...");
                            table.editCellAt(table.getSelectedRow(), 6);
                        } else if (table.isCellEditable(table.getSelectedRow(), 6)) {
                            //free_qty column 
                            System.out.println("column free_qty editing...");
                            table.editCellAt(table.getSelectedRow(), 7);
                        } else if (table.isCellEditable(table.getSelectedRow(), 7)) {
                            //dis % column 
                            System.out.println("column dis % editing...");
                            table.editCellAt(table.getSelectedRow(), 8);
                        } else if (table.isCellEditable(table.getSelectedRow(), 8)) {
                            //free_qty column
                            System.out.println("column free_qty editing...");
                            DefaultTableModel model = (DefaultTableModel) table.getModel();
                            model.addRow(new Vector());
                            table.setRowSelectionInterval(1, 1);
                        }
                    }
                }
            });
    
            JScrollPane scrollPane = new JScrollPane(table);
            frame.add(scrollPane, BorderLayout.CENTER);
            frame.setSize(800, 200);
            frame.setVisible(true);
    
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   camickr    7 年前
    } else {
    
        if (table.isCellEditable(table.getSelectedRow(), 4)) {
    

    上面的条件总是正确的,因为你总是在第四栏开始检查。

    您真正想要做的是创建一个循环,从开始遍历表中的所有列 table.getSelectedColumn() + 1 直到找到下一个可编辑列。