自定义导航JTable的行

时间:2015-03-11 21:39:03

标签: java swing jtable

当我们在第一行按下向上键时如何进入JTable的最后一行,当我们在最后一行按下向下键时如何进入第一行?与Enter键一样,当我们在最后一行按Enter键时,它将转到第一行。

我已完成此编码,但它只显示数据到文本字段:

private void jtKeyReleased(java.awt.event.KeyEvent evt) {                               
    if(evt.getKeyCode()==KeyEvent.VK_DOWN ||evt.getKeyCode()==KeyEvent.VK_UP){
        int row=jt.getSelectedRow();
        String TableClick=(jt.getModel().getValueAt(row,0).toString());
        try{
            String sql="select Product,Roo,TotalStock from pro where                  
            Product='"+TableClick+ "'";
            PreparedStatement pst = (PreparedStatement)     
            conn.prepareStatement(sql);
            ResultSet res = pst.executeQuery();
            if(res.next()){
                String add1=res.getString("Product");
                proo.setText(add1);
                // String add2=res.getString("Id");
                //idd.setText(add2);
                String add3=res.getString("Roo");
                rooo.setText(add3);
                String add4=res.getString("TotalStock");
                stkk.setText(add4);
                abc=res.getString("TotalStock");
            }
        } catch(Exception e) {
        } //catch
    } // if
}

1 个答案:

答案 0 :(得分:2)

您需要创建两个自定义操作:

  1. 从第一行到底部包装的一个动作
  2. 另一个从底部到顶部包裹的动作。
  3. 最简单的方法是利用JTable中定义的现有Actions。 UP键一次向上移动一行,向下键一次向下移动一行。您也可以使用CTRL + HOME转到顶行,按CTRL_END转到最后一行。

    所以我建议从UP Action开始并修改它以实现CTRL + HOME Action。最简单的方法是利用Wrapping Actions的概念。此类是现有Action的包装类,允许您添加自定义代码以增强Action。

    import java.awt.event.*;
    import javax.swing.*;
    
    public class UpAction extends WrappedAction implements ActionListener
    {
        private JTable table;
        private Action endAction;
    
        /*
         *  Specify the component and KeyStroke for the Action we want to wrap
         */
        public UpAction(JTable table, KeyStroke keyStroke)
        {
            super(table, keyStroke);
            this.table = table;
            endAction = table.getActionMap().get("selectLastRow");
        }
    
        /*
         *  Provide the custom behaviour of the Action
         */
        public void actionPerformed(ActionEvent e)
        {
            if (table.getSelectedRow() == 0)
                endAction.actionPerformed( e );
            else
                invokeOriginalAction( e );
        }
    
        private static void createAndShowGUI()
        {
            JTable table = new JTable(7, 5);
            new UpAction(table, KeyStroke.getKeyStroke("UP"));
    
            JFrame frame = new JFrame("SSCCE");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add( new JScrollPane(table) );
            frame.setLocationByPlatform( true );
            frame.pack();
            frame.setVisible( true );
        }
    
        public static void main(String[] args)
        {
            SwingUtilities.invokeLater(new Runnable()
            {
                public void run()
                {
                    createAndShowGUI();
                }
            });
        }
    }
    

    您需要为DOWN功能创建类似的Action。请注意,选择第一行的操作字符串名称为:selectFirstRow。查看Key Bindings以获取给定组件使用的所有操作的列表。