【问题标题】:Sharing a variable between classes在类之间共享变量
【发布时间】:2023-06-12 06:13:02
【问题描述】:

我在 Netbeans 中创建了 2 个 JFrame(Booking、ConfirmBooking),两个框架都连接到 SQL 数据库。在 Booking 类中,用户通过在 jtextfield 中输入数字来从显示的表格中选择一个度假村。如果用户按下下一个按钮。 Class Booking 已处理,ConfirmBooking 已打开。我想访问在 ConfirmBooking 的 jtextfield 中的 Booking 中输入的变量,以访问用户预订的度假村的名称。

Booking类编码,我要访问类中上面设置为public int的ID。

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String x = jTextFieldID.getText();
    ID = Integer.valueOf(x);
    String sql = "SELECT RESORT_NAME FROM LouwDataBase.Resorts WHERE ID = "+ ID;  
        try (PreparedStatement pstmt = conn.prepareStatement(sql)) {

                try (ResultSet rs = pstmt.executeQuery()) {
                    if (rs.next()) {
                    String resortName = rs.getString("RESORT_NAME");

                    int n =  JOptionPane.showOptionDialog(null, 
                    "Do you want to make a booking at "+resortName+"?",
                    "Confirm booking?", 
                    JOptionPane.OK_CANCEL_OPTION, 
                    JOptionPane.INFORMATION_MESSAGE, 
                    null, 
                    new String[]{"Yes I do", "No I don't"},"default");


                    if (n == JOptionPane.YES_OPTION) 
                    {
                        ConfirmBooking CB = new ConfirmBooking();
                        dispose();
                        CB.setLocationRelativeTo(null);
                        CB.setVisible(true);

                    } 
                        else if (n == JOptionPane.NO_OPTION) 
                    {              
            }  
        }
    }

} 
catch (SQLException ex) 
{
Logger.getLogger(Booking.class.getName()).log(Level.SEVERE, null, ex);
}

} 

确认预订课程代码

    public void SetUp()
    {
        UserList();

        String sql = "SELECT RESORT_NAME, COST_PER_NIGHT_ZAR FROM LouwDataBase.Resorts WHERE ID = "+ ID;  
            try (PreparedStatement pstmt = conn.prepareStatement(sql)) 
            {
                    try (ResultSet rs = pstmt.executeQuery()) 
                    {
                        if (rs.next()) 
                        {
                        String Name1 = rs.getString("RESORT_NAME");
                        double Price = rs.getDouble("COST_PER_NIGHT_ZAR");
                        String Rands = Double.toString(Price);
                        ResortName.setText(Name1);
                        ResortPrice.setText("R "+Rands);
                        }
                    }
            } 
            catch (SQLException ex) 
            {
                Logger.getLogger(Booking.class.getName()).log(Level.SEVERE, null, ex);
            }
    }

【问题讨论】:

  • 你不能将你需要的变量注入ConfirmBooking构造函数之类的吗?是否禁止修改这些类?
  • 不,这是我的学校PAT(Practical Assessment Task),我必须创建自己的程序,并对课堂上没有学过的程序进行研究。
  • 那么究竟是什么阻止您通过构造函数或某种方法传递变量?
  • 我试过了,但似乎没有用。

标签: java swing


【解决方案1】:

您可以稍微修改 ConfirmBooking 类,以便可以在该类的构造函数中传递该变量

然后你可以这样做:

if (n == JOptionPane.YES_OPTION) {
     ConfirmBooking CB = new ConfirmBooking(ID);
     dispose();
     CB.setLocationRelativeTo(null);
     CB.setVisible(true);
} 

您将该 ID 存储在 ConfirmBooking 的成员中,并在需要时在 setUp 方法中检索它!

【讨论】:

  • 退货是什么意思?回到了哪里?
【解决方案2】:

你可以试试这样的:

ConfirmBooking CB = new ConfirmBooking();
CB.setResortNumber(resortName);

【讨论】: