我有这个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);
答案 0 :(得分:0)
您为ApplyJob
按钮创建的ActionListener中不存在变量ActionListener
。你必须记住像MouseAdapter
s,jobid
等等的东西实际上是内部类,也就是说它们有自己的范围和它们自己的私有成员变量
就目前而言,您在MouseAdapter
方法中退出的mouseClicked()
变量在ActionListener
方法退出的时候超出了范围,因此您的ActionListener
可以'}看到了。
更好,更惯用的方法是ApplyJob
按钮上的ApplyJobPanel
与表格的数据模型交谈并获取var x = 1
所需的值通过使用表中当前选定的行查询数据模型来构造函数。