Java:选择JTable行,检索值,单击使用值的按钮

时间:2015-07-29 17:05:14

标签: java button jtable

我有这个JTable显示“Jobs”和一个“Apply”按钮,单击此JTable中的这一行Job后单击该按钮。我需要此按钮来检索此行值,然后将用户带到另一个将使用此值的面板。我的“应用”按钮中出现错误“无法解决jobid”,如何检索从JTable中选择并在按钮上使用的jobid?

我的JTable代码:

    JScrollPane scrollPane = new JScrollPane();
    scrollPane.setBounds(184, 198, 628, 338);
    add(scrollPane);
    setLayer(scrollPane, 3);
    table = new JTable();
    scrollPane.setColumnHeaderView(table);
    setTableModelFromDB();
    setLayer(table, 3);
    scrollPane.setViewportView(table);
    scrollPane.setColumnHeaderView(table.getTableHeader());

JTable的MouseAdapter:

            table.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent ex) {
            if (ex.getClickCount() == 2) {
             int rowSelected = table.getSelectedRow();
             if(rowSelected >= 0){
              int jobid = (Integer) table.getModel().getValueAt(rowSelected, 0);
              Job j1 = Job.retrieveJobById(jobid);
              JLayeredPane contentPane = new JobPanel(mf, j1);
              mf.setContentPane(contentPane);
              mf.setVisible(true);

            }
           }
            else if (ex.getClickCount() == 1) {
                 int rowSelected = table.getSelectedRow();
                 if(rowSelected >= 0){
                     int jobid = (Integer) table.getModel().getValueAt(rowSelected, 0);
                    }
            }
          }

         });

应用按钮:

        JButton ApplyJob = new JButton("Apply");
    ApplyJob.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent arg0) {
            // check for selected row first
            if (table.getSelectedRow() != -1) {
                // remove selected row from the model
                JLayeredPane contentPane = new ApplyJobPanel(mf, jobid);
                mf.setContentPane(contentPane);
                mf.setVisible(true);     
               }
        }
    });
    ApplyJob.setFont(new Font("Segoe UI", Font.PLAIN, 16));
    ApplyJob.setBounds(233, 559, 137, 50);
    setLayer(ApplyJob, 3);
    add(ApplyJob);

1 个答案:

答案 0 :(得分:0)

您为ApplyJob按钮创建的ActionListener中不存在变量ActionListener。你必须记住像MouseAdapter s,jobid等等的东西实际上是内部类,也就是说它们有自己的范围和它们自己的私有成员变量

就目前而言,您在MouseAdapter方法中退出的mouseClicked()变量在ActionListener方法退出的时候超出了范围,因此您的ActionListener可以'}看到了。

更好,更惯用的方法是ApplyJob按钮上的ApplyJobPanel与表格的数据模型交谈并获取var x = 1所需的值通过使用表中当前选定的行查询数据模型来构造函数。