2016-04-22 2 views
1

Meine Idee ist es, eine App in Java zu machen, die ein Login-Fenster und dann eine Art Firmenauswahl enthält. Aber ich muss die Unternehmensliste und IDs aus der JSON-URL importieren, was ich getan habe, aber wie kann ich das Array im Konstruktor in eine JList?Wie arraylist oder Array zu JList in Konstruktor setzen?

Das ist meine Hauptmethode

import java.awt.EventQueue; 

public class Main { 
    public static void main(String[] args) {   
     LoginWindow loginWindow = new LoginWindow(); 
     loginWindow.setVisible(true); 
     loginWindow.setSize(500, 400); 
     //loginWindow.setDefaultCloseOperation(Exit); 
    } 
} 

Hier sind meine Login-Fenster.

import java.awt.*; 
import javax.swing.*; 

public class LoginWindow extends JFrame { 

private JLabel item1; 
private JLabel item2; 
private JTextField login; 
private JPasswordField password; 
private JButton loginButton; 
private JPanel loginPanel; 


GridBagConstraints gbc = new GridBagConstraints(); 

public static void main(String[] args) { 

} 

LoginWindow(){ 
    super("MyApp"); 
    setLayout(new GridBagLayout()); 
    gbc.insets = new Insets(5, 5, 5, 5); 
    item1 = new JLabel("Login"); 
    gbc.gridx = 0; 
    gbc.gridy = 1; 
    add(item1, gbc); 

    item2 = new JLabel("Password"); 
    gbc.gridx = 0; 
    gbc.gridy = 2; 
    add(item2, gbc); 

    login = new JTextField(15); 
    gbc.gridx = 2; 
    gbc.gridy = 1; 
    add(login, gbc); 

    password = new JPasswordField(15); 
    gbc.gridx = 2; 
    gbc.gridy = 2; 
    add(password, gbc); 

    loginButton = new JButton("Login");  
    gbc.gridx = 2; 
    gbc.gridy = 3; 
    add(loginButton, gbc); 

    loginButton.addActionListener(new ActionListener() { 

     public void actionPerformed(ActionEvent e) { 
      if("admin".equals(password.getText()) && 
"admin".equals(login.getText())){ 
       dispose(); 
       CompanySelectionWindow frame = new CompanySelectionWindow(); 
       frame.setVisible(true); 
       frame.setSize(500, 300); 
       frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
      } 
      else{ 
     JOptionPane.showMessageDialog(null, "Wrong password or login"); 
      } 

     }}); 



} 

} 

und hier ist CompanySelectionWindow

import javax.swing.*; 
import org.json.*; 
import java.awt.*; 
import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.URL; 
import java.net.URLConnection; 
import java.nio.charset.Charset; 
import java.util.ArrayList; 


public class CompanySelectionWindow extends JFrame { 

private JLabel label; 
private JList list; 
//private JList<JSONArray> list = new JList<>(); 
DefaultListModel<companyInfo> model = new DefaultListModel<>(); 
GridBagConstraints gbc = new GridBagConstraints(); 


public CompanySelectionWindow() { 
    super("Company Selection Window"); 
    //model.addElement(element); 
    setLayout(new GridBagLayout()); 
    gbc.insets = new Insets(5, 5, 5, 5); 
    label = new JLabel("Choose company:"); 
    gbc.gridx = 3; 
    gbc.gridy = 3; 
    add(label); 
    **list = new JList(what and how put something here?);** 
} 

public static void main(String[] args) { 
    String jsonString = callURL("xxx"); 
    System.out.println("\n\njsonString: " + jsonString); 
    ArrayList<JSONObject> array = new ArrayList<>(); 
    //String str = "{id:\"123\",name:\"myName\"} {id:\"456\",name:\"yetanotherName\"}{id:\"456\",name:\"anotherName\"}"; 
    String[] strs = jsonString.split("(?<=\\})(?=\\{)"); 
    for (String s : strs) { 
     System.out.println(s);   
    } 
    try { 

     JSONArray jsonArray = new JSONArray(jsonString); 

     int count = jsonArray.length(); // get totalCount of all jsonObjects 
     for(int i=0 ; i< count; i++){ // iterate through jsonArray 
      JSONObject jsonObject = jsonArray.getJSONObject(i); // get jsonObject @ i position 
      array.add(i, jsonObject); 
      System.out.println("jsonObject " + i + ": " + jsonObject); 
     } 

    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 


} 

public String[] pullArray(String[] a){ 
    return a; 
} 

public static String callURL(String myURL) { 
    System.out.println("Requested URL:" + myURL); 
    StringBuilder sb = new StringBuilder(); 
    URLConnection urlConn = null; 
    InputStreamReader in = null; 

    try { 
     URL url = new URL(myURL); 
     urlConn = url.openConnection(); 
     if (urlConn != null && urlConn.getInputStream() != null) { 
      in = new InputStreamReader(urlConn.getInputStream(), 
        Charset.defaultCharset()); 
      BufferedReader bufferedReader = new BufferedReader(in); 
      if (bufferedReader != null) { 
       int cp; 
       while ((cp = bufferedReader.read()) != -1) { 
        sb.append((char) cp); 
       } 
       bufferedReader.close(); 
      } 

     } 
    in.close(); 
    } catch (Exception e) { 
     throw new RuntimeException("Exception while calling URL:"+ myURL, e); 
    } 

    return sb.toString(); 
} 

Ich habe versucht, eine ArrayList und sogar normale Array aus JSONarray und schieben Sie es auf JList zu machen (weil ich denke, es wird der richtige Weg, es zu tun) . Ich weiß, dass hier alles etwas unordentlich ist. Ich habe mir mehrere Tutorials angesehen und hier und da Artikel gelesen, aber ich kann es nicht tun. Sorry für mein schlechtes Englisch und Entschuldigung, wenn meine Frage dumm ist :). Dank

+0

Ich glaube nicht, dass du dumm bist. –

Antwort

0
public CompanySelectionWindow(String []ar) { 
    super("Company Selection Window"); 
    //model.addElement(element); 
    setLayout(new GridBagLayout()); 
    gbc.insets = new Insets(5, 5, 5, 5); 
    label = new JLabel("Choose company:"); 
    gbc.gridx = 3; 
    gbc.gridy = 3; 
    add(label); 
    jList1.setListData(ar); 
} 

machen Sie Ihren Konstruktor ein Array von Zeichenfolge Elemente rufen dann die Methode übergeben ein Array

public CompanySelectionWindow(ArrayList<String> listdata) { 
    super("Company Selection Window"); 
    //model.addElement(element); 
    setLayout(new GridBagLayout()); 
    gbc.insets = new Insets(5, 5, 5, 5); 
    label = new JLabel("Choose company:"); 
    gbc.gridx = 3; 
    gbc.gridy = 3; 
    add(label); 
    jList1.setListData(listdata.toArray()); 
} 

oder Sie den Konstruktor machen kann annehmen akzeptieren Arraylist dann können Sie den obigen Ansatz folgen hinzufügen Liste zu Daten

1

Versuchen Sie, eine DefaultListModel statt einer Arraylist mit:

DefaultListModel<JSONObject> array = new DefaultListModel<>(); 

dann in den Konstruktor JList passieren.

Verwandte Themen