2013-04-04 3 views
1

Я создал простой JList с 4 параметрами, и у меня есть JTextField рядом с JList. Как я могу получить выбор пользователя из JList для отображения в JTextField? (Кодекс был отредактирован, чтобы включить класс Listener)Как я могу получить элемент JList для отображения в JTextField

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

public class JListExample extends JFrame 
{ 
private JPanel p1, p2; 
private JList jList;                  // instance variables   
private JScrollPane scrollPane; 
private JTextField jtfChoice; 

public JListExample()                 // constructor 
{ 
    String[] itemList = {"alpla", "beta", "gamma", "delta", "omega"};  // array of Strings for list of items 
    jList = new JList(itemList); 
    jList.setSelectedIndex(1);               // default item selected 
    jList.setVisibleRowCount(3);              // no. of visible rows 
    jList.setSize(220, 200); 

    p1 = new JPanel(); 
    p1.add(jtfChoice = new JTextField(8), BorderLayout.CENTER); 

    p2 = new JPanel(); 
    p2.add(scrollPane = new JScrollPane(jList), BorderLayout.WEST); 
    p2.add(p1); 

    add(p2, BorderLayout.EAST); 
    ListenerClass ListSelectionListener = new ListenerClass(); 
    jList.addListSelection(listener); 
} 

public static void main(String[] args) 
{  
    JListExample frame = new JListExample();         // new frame object 
    frame.setTitle("JList Example");           // set frame title 
    frame.pack();                   // sizes the frame so components fit frame 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     // ends program on frame closing 
    frame.setLocationRelativeTo(null);            // centre frame 
    frame.setVisible(true);             // make frame visible 
} 
private class ListenerClass implements ListSelectionListener 
{ 
    public void valueChanged(ListSelectionEvent e) 
    { 
     JTextField.setText(); 
    } 
} 
} 
+0

Это, вероятно, будет полезно: http://docs.oracle.com/javase/tutorial/uiswing/events/ – MikeTheLiar

+0

Вы можете добавить [ListSelectionListener] (http://docs.oracle.com/javase/6/ docs/api/javax/swing/JList.html # addListSelectionListener (javax.swing.event.ListSelectionListener)) в список. –

+0

Я добавил это, но он не компилирует @RussellZahniser? ListenerClass ListSelectionListener = новый ListenerClass(); jList.addListSelection (слушатель); частный класс ListenerClass реализует ListSelectionListener {\t \t общественного недействительный actionPerformed (ListSelectionEvent е) \t { \t}} –

ответ

2

Вы ссылающийся на имя класса, а не переменная:

JTextField.setText(); 

Что вы хотите:

jtfChoice.setText(); 

Кроме того, вы импортирования awt события, когда вы должны импортировать в swing события:

import javax.swing.event.*; 

Кроме того, вы никогда не объявлять listener:

ListenerClass ListSelectionListener = new ListenerClass(); 
jList.addListSelection(listener); //listener doesn't exist 

Вот что вы должны делать:

ListenerClass listener = new ListenerClass(); 
jList.addListSelectionListener(listener); 

Все сказали, окончательный, функциональный класс выглядит следующим образом:

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

public class JListExample extends JFrame { 

    private JPanel p1, p2; 
    private JList jList; 
    private JScrollPane scrollPane; 
    private JTextField jtfChoice; 

    public JListExample() // constructor 
    { 
     String[] itemList = {"alpla", "beta", "gamma", "delta", "omega"}; 
     jList = new JList(itemList); 
     jList.setSelectedIndex(1); 
     jList.setVisibleRowCount(3); 
     jList.setSize(220, 200); 

     p1 = new JPanel(); 
     p1.add(jtfChoice = new JTextField(8), BorderLayout.CENTER); 

     p2 = new JPanel(); 
     p2.add(scrollPane = new JScrollPane(jList), BorderLayout.WEST); 
     p2.add(p1); 

     add(p2, BorderLayout.EAST); 
     ListenerClass listener = new ListenerClass(); 
     jList.addListSelectionListener(listener); 
    } 

    public static void main(String[] args) { 
     JListExample frame = new JListExample(); 
     frame.setTitle("JList Example"); 
     frame.pack(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    private class ListenerClass implements ListSelectionListener { 

     public void valueChanged(ListSelectionEvent e) { 
      jtfChoice.setText(jList.getSelectedValue().toString()); 
     } 
    } 
} 

На полностью несвязанной ноте: ваши комментарии ничего не добавляют. Когда вы говорите что-то вроде:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // ends program on frame closing 

Все, что вы делаете, дублирует то, что уже сказано в коде. Хороший код должен быть самодокументированным, а комментарии должны содержать , почему и как, а не что.

+0

Спасибо, что он работает сейчас :) –

Смежные вопросы