Установка значения из одного класса в другой в Java

1

У меня есть три класса Java:

  • Первый имеет сеттер и геттер
  • Второй имеет JComboBox
  • Третий имеет список запросов MySQL и генерации.

Я использовал setter для установки значения, и я устанавливаю значение из класса combo box.

Теперь я хотел бы получить это значение в другом классе.

Вот мой код:

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 GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new ComboBoxDemo();
            }
        });
    }
}

Теперь я хочу использовать выбранное значение combo box:

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){}

Я хочу сделать все это в выбранном элементе со списком.

Как я могу это достичь?

Теги:
jdbc
swing
jcombobox

2 ответа

0
Лучший ответ

Во втором классе создайте объект " Settings

public void actionPerformed(ActionEvent e) {
    JComboBox comboBox = (JComboBox)e.getSource();
    String selectedRoute = (String)comboBox.getSelectedItem();
    RootSelection r1=new RootSelection();

    //Settings object
    Settings mySettings = new Settings();
    mySettings.setRootName(selectedRoute);
}

Затем передайте этот объект вашему методу в своем третьем классе

Примечание стороны:

вы не должны делать свой класс Settings статическими вещами

Например, это лучше

public class Settings {

    private String RootName;

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

    public String getRootName(){
     return RootName;
    }
}
  • 0
    я сделал, как вы упомянули, но здесь Settings.setRootName (selectedRoute); давать ошибку
  • 0
    В чем ошибка?
Показать ещё 12 комментариев
0

Статические переменные являются уровнями классов. Таким образом, вы изменяете статическую переменную класса кулака во вторых вызовах. Таким образом, вы можете получить доступ к первой переменной класса в третьем классе. Вы можете получить с помощью Settings.getRootName(); в вашем третьем классе

  • 0
    что он делает со строкой rootSelection = Settings.getRootName (); как я понимаю;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню