私はSwingを使用しています。オブジェクトのarraylistと一緒にJListを使用することに専念することに決めました。JListの複製の選択
ボタンを押すとarraylistの内容が表示され、選択されたものを印刷する単一の選択を許可する空のJListを表示するプログラムを作成したかったのです。
私の現在のコードは上記のすべてですが、JList上の1つのエントリをクリックすると2回出力されます。私はこれが簡単に間違っているように感じますが、私はそれを読んでいて、私の脳は協力しなくなりました。
ご協力いただきますようお願い申し上げます。事前に感謝:)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.event.*;
public class textarea {
ArrayList <Pet> petList = new ArrayList <Pet>();
DefaultListModel model = new DefaultListModel();
JList list = new JList();
public static void main (String [] args){
textarea gui = new textarea();
gui.go();
}
public void go(){
petList.add(new Pet("Lucy","Dog",5));
petList.add(new Pet("Geoff","Cat",2));
petList.add(new Pet("Hammond","Hamster",1));
model = new DefaultListModel();
for(Pet p:petList){
model.addElement(p.toString());
}
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JButton button = new JButton("view pets");
button.addActionListener(new ButtonListener());
JScrollPane scroller = new JScrollPane(list);
scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
panel.add(scroller);
list.setVisibleRowCount(4);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.addListSelectionListener(new ListSelectionListener(){
public void valueChanged(ListSelectionEvent event){
String selection = (String) list.getSelectedValue();
System.out.println(selection);
}
});
frame.getContentPane().add(BorderLayout.CENTER,panel);
frame.getContentPane().add(BorderLayout.SOUTH,button);
frame.setSize(350,300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}//end go()
class ButtonListener implements ActionListener{
public void actionPerformed(ActionEvent event){
list.setModel(model);
}
}//end ButtonListener
}
一般的なコメント:あなたは '使用して、[EDT](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html)でGUIコードを実行する必要がありますSwingUtilities.invokeLater() ' – assylias
ありがとう、私はそれを心に留めて、それに応じてコードを変更します。 – skon