Java GUI:如何将actionPerformed内的值传递给外部tableFill方法?
解决方案
你可以直接在buttOK的actionPerformed方法内部调用TableR.tabFill(),Java 8及以后允许内部类访问外部方法的有效final局部变量(初始化后未被重新赋值的变量),你的TableR、jtPbm、Years都满足这个条件,因此可以直接使用。
具体修改步骤
在数据库查询成功的提示代码后,添加调用tableFill的代码,传入已获取的pbmGot和yearGOt:
if (x == true) { JOptionPane.showMessageDialog(Principal, "¡La consulta fue exitosa!", "Aviso", JOptionPane.INFORMATION_MESSAGE); // 传递值给tableFill方法 TableR.tabFill(pbmGot, yearGOt); }
修改后的完整actionPerformed代码片段
buttOK.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String pbmGot = jtPbm.getText(); String yearGOt = Years.getSelectedItem().toString(); if (pbmGot.equals("") || yearGOt.equals("")) { JOptionPane.showMessageDialog(Principal, "¡Información incompleta!", "Error", JOptionPane.ERROR_MESSAGE); } else { try { int pbmValue = Integer.parseInt(pbmGot); if (pbmValue > 100 || pbmValue <= 0) { JOptionPane.showMessageDialog(Principal, "¡Información errónea!", "Error", JOptionPane.ERROR_MESSAGE); } else { DBConnect sql = new DBConnect(pbmGot, yearGOt); ArrayList<Object> s = sql.ConnectDB(); boolean x = (boolean) s.get(0); if (x) { JOptionPane.showMessageDialog(Principal, "¡La consulta fue exitosa!", "Aviso", JOptionPane.INFORMATION_MESSAGE); // 调用tableFill并传递参数 TableR.tabFill(pbmGot, yearGOt); } } } catch (NumberFormatException ex) { // 补充异常处理,防止用户绕过focusListener输入无效值 JOptionPane.showMessageDialog(Principal, "¡Ingresa un PBM válido!", "Error", JOptionPane.ERROR_MESSAGE); jtPbm.setText(""); } } } });
补充说明
- 额外添加了
try-catch包裹Integer.parseInt,避免用户在失去焦点后再次修改为无效值并点击按钮的情况。 - 如果后续需要在更多类内方法中访问
jtPbm、Years或TableR,可以将这些变量提升为GUI类的成员变量(放在init方法外部),这样整个类的方法都能直接访问。
内容的提问来源于stack exchange,提问作者Miguel Buitrago
相关产品推荐
相关产品推荐

