У меня есть три класса Java:
Я использовал 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){}
Я хочу сделать все это в выбранном элементе со списком.
Как я могу это достичь?
Во втором классе создайте объект " 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;
}
}
Статические переменные являются уровнями классов. Таким образом, вы изменяете статическую переменную класса кулака во вторых вызовах. Таким образом, вы можете получить доступ к первой переменной класса в третьем классе. Вы можете получить с помощью Settings.getRootName(); в вашем третьем классе