[英]How can I get JList item to be displayed in a JTextField
我創建了一個帶有4個選項的簡單JList,並且在JList旁邊有一個JTextField。 如何讓JList中的用戶選擇顯示在JTextField中? (代碼已編輯為包含Listener類)
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();
}
}
}
您引用的是類名,而不是變量:
JTextField.setText();
你想要的是:
jtfChoice.setText();
此外,當您導入swing
事件時,您正在導入awt
事件:
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
您所做的只是重復代碼已經說明的內容。 好的代碼應該是自我記錄的,評論應該解釋原因和方法 ,而不是什么 。
您只需添加一個ListSelectionListener ,您可以在其中更新JTextField。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.