2016-04-22 13 views
1

私のアイデアは、Javaスイングでアプリケーションを作ることです。これには、ログインウィンドウがあり、次に企業選択ツールが含まれています。しかし、私はjsonのURLから会社のリストとIDをインポートする必要がありますが、これはコンストラクタ内の配列をJListにプッシュするにはどうすればいいですか?arraylistまたは配列をコンストラクタのJListに置く方法は?

これは私のメインの方法

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

ここに私のログインウィンドウがありますです。

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"); 
      } 

     }}); 



} 

} 

、ここでは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(); 
} 

だ私は(私はそれはそれを行うための正しい方法だろうと思います原因)JSONarrayのうちArrayList、さらには通常の配列を作成し、JListにプッシュしようとしました。私はここのすべてがちょっと面倒だと知っています。私はいくつかのチュートリアルを見て、ここでいくつかの記事を読んだが、私はそれをすることはできません。私の悪い英語と申し訳ありません私の質問がばかだと申し訳ありません:)。おかげ

+0

私はあなたがばかだとは思わない。 –

答えて

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

、配列

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()); 
} 

またはあなたは、あなたが追加するには、上記の方法に従うことができArrayListのを受け入れるようにコンストラクタを作ることができますを渡すメソッドを呼び出して、あなたのコンストラクタはあなたの文字列アイテムの配列を受け入れるように作りますリストにデータ

1

ではなく、ArrayListののDefaultListModelを使用してみてください:

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

その後、JListのコンストラクタに渡します。

関連する問題