You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将私有按钮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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 18:18:15