わかりましたので、在庫のほんの一部を行っています。私はそれのほとんどを降ろしました。 ArrayListに文字列項目を追加して、それをJListに追加しようとしています。ただし、コンパイルするとこのエラーが発生します。
C:\Users\Dan\Documents\DanJavaGen\inventory.Java:30: cannot find symbol
symbol : constructor JList(Java.util.ArrayList<Java.lang.String>)
location: class javax.swing.JList
list = new JList(arr);
それはおそらく私がしているいくつかの新人の間違いです...:/
コード:
import Java.applet.Applet;
import Java.awt.*;
import javax.swing.*;
import javax.swing.JList;
import Java.awt.event.*;
import Java.util.ArrayList;
import Java.io.*;
import Java.util.*;
public class inventory extends JApplet implements MouseListener {
public static String newline;
public static JList list;
int gold = 123;
public void init() {
ArrayList<String> arr = new ArrayList<String>();
arr.add("Hatchet");
arr.add("Sword");
arr.add("Shield");
arr.add(gold + " Gold");
System.out.println("You have " + arr.size() + " items in your inventory.");
showInventory(arr);
list = new JList(arr);
add(list);
list.addMouseListener(this);
list.setVisible(true);
}
public static void showInventory (ArrayList<String> theList) {
for (int i = 0; i < theList.size(); i++) {
System.out.println(theList.get(i));
}
}
public void mousePressed(MouseEvent e) { }
public void mouseReleased(MouseEvent e) {
Object index = list.getSelectedValue();
System.out.println("You have selected: " + index);
}
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mouseClicked(MouseEvent e) { }
public void Paint(Graphics g) {
}
}
JListはコンストラクタを提供しますJList(Object [])ArrayList <String>を展開した後に呼び出すことができますtoArray()を使用します:
list = new JList(arr.toArray())
プロジェクトのtoArray()とJListにも問題がありました。いくつかの調査を行い、いくつかのことを試してみて、機能するものを見つけました。それがすべての人に役立つことを願っています:
ArrayList<String> i = new ArrayList<>();
String[] str = new String[i.size()];
//Assuming there is data in your list
JList<String> list = new JList<>(i.toArray(str));
これを試して:
DefaultListModel listModel = new DefaultListModel();
for (int i = 0; i < arrayList().size(); i++)
{
listModel.addElement(arrayList().get(i));
}
jList1.setModel(listModel);
toArray()
メソッドで例外が発生して問題が発生したため、変換するための簡単な汎用メソッドを作成しました。多分誰かもそれが便利だと思うでしょう。私はこれが古い記事であることを知っていますが、それでも時々見られることは間違いないでしょう。メソッドは次のとおりです。
private <T> void populateArrayFromList(T[] arr, ArrayList<T> arrayList) {
System.out.println("Array size " + arr.length);
System.out.println("ArrayList size " + arrayList.size());
for (int i = 0; i < arrayList.size(); i++) {
arr[i] = arrayList.get(i);
}
}
次のように、渡す前に配列を作成するだけです
String[] arr = new String[arrayList.size()];
次に、コードから呼び出すだけです
populateArrayFromList(arr, arrayList);
mysqlでデータを取得するためのループがある場合は、このように置くことができます
while(result.next()){
itemid = result.getInt("id");
itempice = result.getInt("price");
itemname = result.getString("itemname");
arraylist.add(itemname+" Price: "+itempice);
}
jList.setListData(arraylist.toArray());
私は単にListModelインターフェースを実装しました:
package proba;
import Java.awt.BorderLayout;
import Java.awt.EventQueue;
import Java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.ListModel;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListDataListener;
public class Proba extends JFrame {
ArrayList<String> al = new ArrayList<>();
public Proba() {
al.add("1111111");
al.add("2222222");
al.add("3333333");
setLayout(new BorderLayout());
MyListModel lm = new MyListModel();
JList l = new JList(lm);
l.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
JScrollPane sp = new JScrollPane(l);
add(sp, BorderLayout.CENTER);
}
class MyListModel implements ListModel {
@Override
public int getSize() {
return al.size();
}
@Override
public Object getElementAt(int index) {
return al.get(index);
}
@Override
public void addListDataListener(ListDataListener l) {
}
@Override
public void removeListDataListener(ListDataListener l) {
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
Proba app = new Proba();
app.setSize(600, 480);
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setVisible(true);
}
});
}
}
ドラッグアンドドロップコンポーネントを使用している場合は、リストに「itemList」という名前を付けます。arrは、いくつかの文字列データを含む配列リストの名前だと思います。
`DefaultComboBoxModel model=
new DefaultComboBoxModel(arr.toArray(new String[arr.size()]));
itemList.setModel(model);`
これがうまくいくことを願っています。
コンストラクタの概要JList()
空の読み取り専用モデルでJList
を構築します。JList(ListModel dataModel)
指定されたnull以外のモデルの要素を表示するJList
を構築します。JList(Object[] listData)
指定された配列の要素を表示するJList
を構築します。JList(Vector<?> listData)
指定されたベクターの要素を表示するJList
を構築します。
JListのタイプとしてObject
スーパークラスを渡すことができます。
ArrayList<String> arr = new ArrayList<String>();
arr.add("Hatchet");
arr.add("Sword");
arr.add("Shield");
JList<Object> list = JList<Object>(arr.toArray());