如何将私有按钮ActionListener中的变量传递至另一个JFrame?——NetBeans类Netflix应用开发问题
解决JFrame间数据传递的问题
嘿,我完全懂你现在卡在哪了——私有ActionListener里的局部变量没法传到下一个Opciones窗口对吧?改按钮的public权限根本没用,因为问题出在变量作用域和窗口间数据传递的方式上,和按钮本身的访问权限没关系。
给你几个实用的解决方案,都是Java Swing里常用的窗口传值方式:
方案1:给Opciones类添加带参数的构造函数
这是最直接的方式,把需要传递的数据通过构造函数传给新窗口:
首先修改你的Opciones类,添加一个带参数的构造函数,把需要的变量存为类的成员变量:
public class Opciones extends JFrame { // 定义成员变量存储传递过来的支付信息 private int userSaldo; private String tarjetaNumero; private String mesExpiracion; private String añoExpiracion; // 带参数的构造函数 public Opciones(int saldo, String tarjeta, String mes, String año) { initComponents(); // 保留NetBeans自动生成的初始化方法 // 把传入的参数赋值给成员变量 this.userSaldo = saldo; this.tarjetaNumero = tarjeta; this.mesExpiracion = mes; this.añoExpiracion = año; // 这里可以直接用这些变量做后续操作,比如校验支付能力、显示余额等 } // 如果需要保留原来的无参构造函数,也可以保留 public Opciones() { initComponents(); } }
然后回到第一个窗体的ActionListener里,创建Opciones实例时把参数传进去:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { String Tarjeta = BTarjeta.getText(); String MesExpiracion = (String) BMes.getSelectedItem(); String AñoExpiracion = (String) Baño.getSelectedItem(); String Saldo = BSaldo.getText(); try{ int SaldoInt = Integer.parseInt(Saldo); // 注意:你原来的代码是Saldo(字符串)+25,会拼接成"xxx25",要改成SaldoInt才是数字相加! System.out.println(SaldoInt + 25); // 隐藏当前窗口,创建Opciones实例并传入参数 this.setVisible(false); Opciones c = new Opciones(SaldoInt, Tarjeta, MesExpiracion, AñoExpiracion); c.setVisible(true); } catch (NumberFormatException ex){ ex.printStackTrace(); // 这里可以加个友好提示,比如告诉用户输入的余额不是有效数字 JOptionPane.showMessageDialog(this, "请输入有效的数字格式余额!"); } }
方案2:给Opciones类添加Setter方法
如果不想修改构造函数,也可以给Opciones类添加Setter方法,创建实例后再设置变量:
先在Opciones类里添加Setter:
public class Opciones extends JFrame { private int userSaldo; private String tarjetaNumero; // ...其他成员变量 // Setter方法 public void setUserSaldo(int saldo) { this.userSaldo = saldo; } public void setTarjetaNumero(String tarjeta) { this.tarjetaNumero = tarjeta; } public void setMesExpiracion(String mes) { this.mesExpiracion = mes; } public void setAñoExpiracion(String año) { this.añoExpiracion = año; } }
然后在ActionListener里调用Setter:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // ...前面的代码不变 try{ int SaldoInt = Integer.parseInt(Saldo); this.setVisible(false); Opciones c = new Opciones(); // 调用Setter设置变量 c.setUserSaldo(SaldoInt); c.setTarjetaNumero(Tarjeta); c.setMesExpiracion(MesExpiracion); c.setAñoExpiracion(AñoExpiracion); c.setVisible(true); } catch (NumberFormatException ex){ ex.printStackTrace(); JOptionPane.showMessageDialog(this, "请输入有效的数字格式余额!"); } }
小提醒
你原来代码里的System.out.println(Saldo + 25);有个小问题:Saldo是字符串类型,和数字25相加会做字符串拼接(比如输入100的话,输出是"10025"而不是125),要改成SaldoInt + 25才是正确的数字运算哦。
内容的提问来源于stack exchange,提问作者Ali Kriem
相关产品推荐
相关产品推荐

