在Java中设置从一个类到另一个类的值

在Java中设置从一个类到另一个类的值,java,swing,jdbc,jcombobox,Java,Swing,Jdbc,Jcombobox,我有三个Java类: 第一个有一个二传手和一个接球手 第二个有一个JComboBox 第三个是MySQL查询和生成列表。 我使用setter设置值,并从组合框类中设置值 现在,我想在另一个类中得到这个值 这是我的密码: public class Settings { private static String RootName; public static void setRootName(String rootName){ RootName = rootName;

我有三个Java类:

第一个有一个二传手和一个接球手 第二个有一个JComboBox 第三个是MySQL查询和生成列表。 我使用setter设置值,并从组合框类中设置值

现在,我想在另一个类中得到这个值

这是我的密码:

public class Settings {

    private static String RootName;

    public static void setRootName(String rootName){
     RootName = rootName;
    }

    public static String getRootName(){
     return RootName;
    }
}
combobox.java

public class ComboBoxDemo extends JPanel
                          implements ActionListener {
    String connectionURL = "jdbc:mysql://localhost:3306/Trainpis";
    JLabel picture;
    public static String i="hello";
public String rootname;
    public ComboBoxDemo()  {

 JComboBox combo=new JComboBox();
combo.addActionListener(this);



JFrame f=new JFrame();
JPanel p=new JPanel();
try{
Class.forName("com.mysql.jdbc.Driver");
java.sql.Connection conn = DriverManager.getConnection(connectionURL, "root", "");
Statement st=conn.createStatement();
ResultSet rs=st.executeQuery("Select route from route");
while(rs.next()){
combo.addItem(rs.getString("route"));
//System.out.println(rs.getString("route"));
}
}
catch(Exception e){}
p.add(combo);
f.add(p);
  f.setExtendedState(JFrame.MAXIMIZED_BOTH); 
  f.setUndecorated(true);
f.setVisible(true);

 }

    /** Listens to the combo box. */
    public void actionPerformed(ActionEvent e) {
     JComboBox cb = (JComboBox)e.getSource();
        String selectedRoute = (String)cb.getSelectedItem();
       // System.out.println(rootname);
        String root1="Huda City Center - Noida City Center";
       if(selectedRoute.equalsIgnoreCase(root1))
       {
           System.out.println("hello");
     //new Test();
           //Settings mysettings = new Settings();
   Settings.setRootName(selectedRoute);

    RootSelection1 r1 = new RootSelection1();
        r1.print();
       }
       else{
       System.out.println("bye");
       } 
    }

   public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new ComboBoxDemo();
            }
        });
    }
}
现在我想使用组合框的选定值:

String rootSelection = Settings.getRootName();
String selectStoredProc = "SELECT sino,stationname,distance from station where route ='"+rootSelection+"'";
String [] root;

try{
    Class.forName("com.mysql.jdbc.Driver");
    Connection conn = DriverManager.getConnection(connectionURL, "root", "");

    PreparedStatement ps = conn.prepareStatement(selectStoredProc);
    ResultSet rs=ps.executeQuery();
    while(rs.next()){
        String s1=rs.getString("stationname"); 
        nameList.add(s1);
        root = nameList.toArray(new String[nameList.size()]);
    }
}
catch(Exception e){}
我想在组合框的选定项上执行所有这些操作


如何实现这一点?

静态变量是类级别。因此,您正在第二次调用中更改First类静态变量。因此,您可以在第三类中访问第一类变量。你可以通过使用
Settings.getRootName;在第三个类中

在第二个类中创建一个设置对象

然后将此对象传递给第三个类中的方法

旁注:

你不应该让你的设置类充满了静态的东西

这样比较好

public class Settings {

    private String RootName;

    public void setRootName(String rootName){
     RootName = rootName;
    }

    public String getRootName(){
     return RootName;
    }
}

请和它应该做什么,goalit应该把值组合框中选定的项目传递给第三类只是一个提示,我会小心选择sino,stationname,距离route='+rootSelection+'的站点的距离;这对于安全注入来说是危险的。你能提供创建组合框和其他东西的源代码吗?因为除了它非常可怕之外,当涉及到好的代码时,你在那里做的静态的东西和上面的剪报,该值将在第三个剪报中可用。。。e、 g.通过字符串rootSelection=Settings.getRootName,您已经完成了要求的操作;这让我猜你只是没有从你的询问中得到任何东西;这就是他对字符串rootSelection=Settings.getRootName所做的;正如我所理解的那样;我按照你说的做了,但这里是Settings.setRootNameselectedRoute;给error@user3419449请稍候,Settings.setRootNameselectedRoute尝试访问静态成员方法,而Settings.setRootNameselectedRoute是您应该编写的。我猜他认为他仍然可以使用您更好的私有字符串RootName。。。类,例如Settings.setRootName…我已经更新了答案,将对象名称从Settings更改为mysettingserr是非静态方法setRootNameString不能从静态上下文中引用
public class Settings {

    private String RootName;

    public void setRootName(String rootName){
     RootName = rootName;
    }

    public String getRootName(){
     return RootName;
    }
}