【问题标题】:How can I get JList item to be displayed in a JTextField如何让 JList 项目显示在 JTextField 中
【发布时间】:2013-03-26 16:18:31
【问题描述】:

我制作了一个带有 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();
    }
}
}

【问题讨论】:

  • 您可以在列表中添加ListSelectionListener
  • 我已经添加了这个,但它没有编译 @RussellZahniser ? ListenerClass ListSelectionListener = new ListenerClass(); jList.addListSelection(监听器);私有类 ListenerClass 实现 ListSelectionListener { public void actionPerformed(ListSelectionEvent e) { } }
  • @MarcusWard 如果您使用ListenerClass 和新代码更新您的问题,则更容易找出问题所在。
  • 我现在添加了 ListenerClass @mikeTheLiar

标签: java swing jtextfield jlist listselectionlistener


【解决方案1】:

您引用的是类名,而不是变量:

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());
        }
    }
}

在一个完全不相关的注释中:您的 cmets 并没有真正添加任何东西。当你说这样的话:

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

您所做的只是复制代码已经说过的内容。好的代码应该是自记录的,cmets 应该解释为什么如何,而不是what

【讨论】:

    【解决方案2】:

    您可以简单地添加一个ListSelectionListener,在其中您可以让它更新 JTextField。

    【讨论】:

      猜你喜欢
      • 2012-11-30
      • 2010-12-09
      • 2015-05-19
      • 2015-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多