2012-01-17 16 views
0

JListに要素を追加できるようにするにはいくつかの助けと、要素whithイベントを選択する方法が必要です。JListに追加して要素を選択しますか?

これは私のJListです:

DefaultListModel model = new DefaultListModel(); 
JList list = new JList(model); 
list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); 
JScrollPane listScroller = new JScrollPane(list); 
listScroller.setPreferredSize(new Dimension(430, 80)); 

これは、別のボタンを扱う私のActionListenerの一部です。ここでは、model.add( "Name");を使用します。ボット私はEclipseで赤い下線を得る!

public void actionPerformed(ActionEvent event){ 
// New customer 
if(event.getSource() == buttonNewCustomer && statusButtonNewCustomer) 
{ 
String name = textInputName.getText(); 
String number = textInputPersonalNumber.getText(); 
boolean checkCustomerExist = customHandler.findCustomer(name, number); 

if(!checkCustomerExist) // If not true add new customer 
{ 
customHandler.addCustomer(name, number); // Call method to add name 
setTitle(title + "Kund: " + name); // Set new title 
model.addElement(name); 
} 
} 
} 

次に、JListの中でどのように要素を選択する必要があるか、少し助けてください。クラスまたはFrameHandlerオブジェクトにActionListenerを実装する必要がありますか?ありがとう!

EDIT:私が解決できない主な問題は、JListがconstrucorの内側にあり、私がmodel.add( "name")を使うときです。コンストラクタ内部では動作しますが、コンストラクタの外側に何かを追加したいときには機能しません。チュートリアルを何度か読んだことがありますが、これについて何か助けを見つけることはできません。

EDIT 2:完成コード。おそらくスコープの問題から外れていますか?

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

public class GUI4EX extends JFrame implements ActionListener{ 

private JButton buttonNewCustomer, buttonTerminate, buttonAddNewName, buttonAddNewSavingsAccount, buttonAddNewCreditAccount; 
private JLabel textLabelName, textLabelPersonalNumber, textLabelNewName; 
private JTextField textInputName, textInputPersonalNumber, textInputNewName; 
private JPanel panelNewCustomer, panelQuit, panelNewAccount, panelChangeName, panelSelectCustomer; 

private boolean statusButtonNewCustomer = true; 
private boolean statusButton2 = true; 
private boolean statusButtonAddNewName = true; 

private String title = "Bank "; 

// Create a customHandler object 
CustomHandler customHandler = new CustomHandler(); 

// Main method to start program 
public static void main(String[] args){ 
    GUI4EX frame = new GUI4EX(); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(3); 
} 

// Cunstructor 
public GUI4EX(){ 
    // Create window 
    setTitle(title); 
    setSize(450,500); 
    setLocation(400,100); 
    setResizable(false); 

    // Set layout to boxlayout 
    Container container = getContentPane(); 
    setLayout(new BoxLayout(container, BoxLayout.Y_AXIS)); 

    DefaultListModel model = new DefaultListModel(); 
    JList list = new JList(model); 
    list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); 
    JScrollPane listScroller = new JScrollPane(list); 
    listScroller.setPreferredSize(new Dimension(430, 80)); 


    model.addElement("test"); 
    model.addElement("test"); 
    model.addElement("test"); 
    model.addElement("test"); 
    model.addElement("test"); 
    model.addElement("test"); 

    // Create jpanels 
    panelNewCustomer = new JPanel(); 
    panelQuit = new JPanel(); 
    panelNewAccount = new JPanel(); 
    panelChangeName = new JPanel(); 
    panelSelectCustomer = new JPanel(); 

    // Create and add components - buttons 
    buttonNewCustomer = new JButton("OK"); 
    buttonTerminate = new JButton("Avsluta"); 
    buttonAddNewName = new JButton("OK"); 
    buttonAddNewSavingsAccount = new JButton("Sparkonto"); 
    buttonAddNewCreditAccount = new JButton("Kreditkonto"); 

    // Create and add components - labels 
    textLabelName = new JLabel("Namn"); 
    textLabelPersonalNumber = new JLabel("Personnummer"); 
    textLabelNewName = new JLabel("Nytt namn"); 
    //add(textLabel1); 

    // Create and add components - textfields 
    textInputName = new JTextField(""); 
    textInputPersonalNumber = new JTextField(""); 
    textInputName.setColumns(10); 
    textInputPersonalNumber.setColumns(10); 
    textInputNewName = new JTextField(); 
    textInputNewName.setColumns(20); 

    // Add components to panel new customer 
    panelNewCustomer.add(textLabelName); 
    panelNewCustomer.add(textInputName); 
    panelNewCustomer.add(textLabelPersonalNumber); 
    panelNewCustomer.add(textInputPersonalNumber); 
    panelNewCustomer.add(buttonNewCustomer); 

    // Add components to panel to select customer 
    panelSelectCustomer.add(listScroller); 

    // Add components to panel new name 
    panelChangeName.add(textLabelNewName); 
    panelChangeName.add(textInputNewName); 
    panelChangeName.add(buttonAddNewName); 

    // Add components to panel new accounts 
    panelNewAccount.add(buttonAddNewSavingsAccount); 
    panelNewAccount.add(buttonAddNewCreditAccount); 

    // Add components to panel quit 
    panelQuit.add(buttonTerminate); 

    // Set borders to jpanels 
    panelNewCustomer.setBorder(BorderFactory.createTitledBorder("Skapa ny kund")); 
    panelChangeName.setBorder(BorderFactory.createTitledBorder("Ändra namn")); 
    panelNewAccount.setBorder(BorderFactory.createTitledBorder("Skapa nytt konto")); 
    panelQuit.setBorder(BorderFactory.createTitledBorder("Avsluta programmet")); 
    panelSelectCustomer.setBorder(BorderFactory.createTitledBorder("Välj kund")); 

    // Add panels to window 
    add(panelNewCustomer); 
    add(panelSelectCustomer); 
    add(panelChangeName); 
    add(panelNewAccount); 
    add(panelQuit); 

    // Listener 
    // FrameHandler handler = new FrameHandler(); 

    // Add listener to components 
    //button1.addActionListener(handler); 
    buttonNewCustomer.addActionListener(this); 
    buttonAddNewName.addActionListener(this); 
    buttonAddNewSavingsAccount.addActionListener(this); 
    buttonAddNewCreditAccount.addActionListener(this); 
    buttonTerminate.addActionListener(this); 
} 


//private class FrameHandler implements ActionListener{ 

    public void actionPerformed(ActionEvent event){ 
     // New customer 
     if(event.getSource() == buttonNewCustomer && statusButtonNewCustomer) 
     { 
      String name = textInputName.getText(); 
      String number = textInputPersonalNumber.getText(); 
      boolean checkCustomerExist = customHandler.findCustomer(name, number); // Check if customer exist 

      if(!checkCustomerExist) // If not true add new customer 
      { 
       customHandler.addCustomer(name, number); // Call method to add name 
       setTitle(title + "Kund: " + name); // Set new title 
       model.addElement("name"); 
      } 
     } 

     // Change name 
     if(event.getSource() == buttonAddNewName && statusButtonAddNewName) 
     { 
      String newName = textInputNewName.getText(); 
      customHandler.changeName(newName); // call method to change name 
      setTitle(title + "Kund: " + newName); 
     } 

     // Create new savings account 
     if(event.getSource() == buttonAddNewSavingsAccount) 
     { 
      customHandler.CreateNewSavingsAccount();  
     } 

     // Create new credit account 
     if(event.getSource() == buttonAddNewCreditAccount) 
     { 
      customHandler.CreateNewCreditAccount(); 
     } 

     // Terminate program 
     if(event.getSource()==buttonTerminate && statusButton2) 
     { 
      System.exit(3); 
     } 

    } 

//} 

}

答えて

1

あなたは、私は良い気分で午前幸運です。ここでは、あなたが提供したコードと一致する非常に基本的な例を示します。テキストフィールドに何かを入力し、Enterボタンを押して、リストが表示されるのを見てください。

import javax.swing.DefaultListModel; 
import javax.swing.JFrame; 
import javax.swing.JList; 
import javax.swing.JTextField; 
import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

public class AddToJListDemo { 

    private static JFrame createGUI(){ 
    JFrame frame = new JFrame(); 

    final DefaultListModel model = new DefaultListModel(); 
    JList list = new JList(model); 

    final JTextField input = new JTextField(10); 
    input.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent aActionEvent) { 
     String text = input.getText(); 
     if (text.length() > 0) { 
      model.addElement(text); 
      input.setText(""); 
     } 
     } 
    }); 

    frame.add(list, BorderLayout.CENTER); 
    frame.add(input, BorderLayout.SOUTH); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    return frame; 
    } 

    public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
     JFrame frame = createGUI(); 
     frame.setSize(200,200); 
     frame.setVisible(true); 
     } 
    }); 
    } 
} 

編集

あなたの完全なコードに基づいて、例えば、リストにに似てあなたのGUI4EXクラスのフィールドを、しなければならないbuttonNewCustomerフィールド

public class GUI4EX extends JFrame implements ActionListener{ 
    //... all other field 
    DefaultListModel model; 

    //constructor 
    public GUI4EX(){ 
    //all other code 
    //DefaultListModel model = new DefaultListModel(); instantiate the field instead 
    model = new DefaultListModel(); 
    JList list = new JList(model); 
    //rest of your code 
    } 
} 

これは、確認しますactionPerformedメソッドのmodelにアクセスできます。しかし、あなたがこの基本的なことを理解できないなら、GUIを作成するのではなく、基本的なJavaの構文とOOの原則を読んでください。

+0

あなたのことはとても親切ですが、JListに要素を追加するのはなぜですかそれがコンストラクタで作成されたとき。オブジェクトが作成されたときにコンストラクタを内部に追加すると機能しますが、コンストラクタの外側のメソッドから追加したいと思います。それは可能でなければなりませんが、私はJavaを学んでおり、それを正しく得ることができませんか?ヘルプは事前設定されています。 –

+0

それはおそらく範囲外ですが、あなたは関連するコードを投稿しませんでした。おそらく、リストをフィールドに格納して、コンストラクタの外でアクセスできるようにする必要があります。 [クラスとオブジェクトのチュートリアル](http://docs.oracle.com/javase/tutorial/java/javaOO/index.html)を読むか、関連コード(または少なくともコンパイルエラー)を投稿することをお勧めします。 – Robin

+0

はいスコープが問題になる可能性があります。フィールドにリストを保存する方法の例をいくつか表示できますか?私はクラスやオブジェクトについて学んでいますが、時にはそれをすべて理解することも難しいです。私は完全なコードを追加しようとしましたが、それは長いです –

関連する問題