【问题标题】:Create editable JList which contains JTextFields创建包含 JTextFields 的可编辑 JList
【发布时间】:2016-03-23 19:48:09
【问题描述】:

我想创建可编辑的JList。这是我的示例代码:

package okienko;

import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

class Frane extends JFrame {

    private JPanel contentPane;
    private JList<String> list;
    private JLabel lblLabel;
    private DefaultListModel<String> model;


    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            public void run() {
                try {
                    Frane frame = new Frane();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }


    public Frane() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        GridBagLayout gbl_contentPane = new GridBagLayout();
        gbl_contentPane.columnWidths = new int[]{0, 0};
        gbl_contentPane.rowHeights = new int[]{0, 0, 0};
        gbl_contentPane.columnWeights = new double[]{1.0, Double.MIN_VALUE};
        gbl_contentPane.rowWeights = new double[]{0.0, 1.0, Double.MIN_VALUE};
        contentPane.setLayout(gbl_contentPane);

        lblLabel = new JLabel("LABEL");
        GridBagConstraints gbc_lblLabel = new GridBagConstraints();
        gbc_lblLabel.insets = new Insets(0, 0, 5, 0);
        gbc_lblLabel.gridx = 0;
        gbc_lblLabel.gridy = 0;
        contentPane.add(lblLabel, gbc_lblLabel);

        JScrollPane scrollPane = new JScrollPane();
        GridBagConstraints gbc_scrollPane = new GridBagConstraints();
        gbc_scrollPane.fill = GridBagConstraints.BOTH;
        gbc_scrollPane.gridx = 0;
        gbc_scrollPane.gridy = 1;
        contentPane.add(scrollPane, gbc_scrollPane);

        model = new DefaultListModel<String>();
        list = new JList<String>(model);
        JTextField field = new JTextField("TEXT");
        field.setEditable(true);
        model.addElement(field.getText());

        scrollPane.setViewportView(list);
        list.addKeyListener(new KeyListener() {

            @Override
            public void keyTyped(KeyEvent e) {
            }

            @Override
            public void keyReleased(KeyEvent e) {
            }

            @Override
            public void keyPressed(KeyEvent e) {
                if (e.getExtendedKeyCode() == 10) {
                    JTextField tf = new JTextField("A");
                    model.addElement(tf.getText());
                }
            }
        });
    }

}

所以我想要一个list,我可以在其中输入新行,其中每行将是一个单独的JTextField。我的代码用一个textfield 创建了一个list,在按下ENTER 键之后,添加了下一个JTextField。但它只显示了传递给JTextField的构造函数的文本。

ENTER 键后,我想编写自己的文本,当我再次按ENTER 键时,我想创建一个新字段。
我还想通过单击鼠标在字段之间切换并编辑这些字段。
是否可以创建这种JList?也许我的问题还有其他解决方案。我愿意接受建议。

【问题讨论】:

    标签: java jtextfield jlist


    【解决方案1】:

    当新项目(某种Object)添加到JList 时,会调用ObjecttoString() 方法。生成的StringJList 中显示为JLabel。所以你不能直接将JTextField 添加到JList。因为JTextFieldtoString() 不会返回任何可读信息。

    如果您想在JList 中添加JTextFields,您必须通过扩展JList 创建您的List 类,并且您必须修改它以添加JTextField 作为项目而不是@987654337 @s。但我不认为这对你来说是一项简单的任务,而且会如此混乱..

    完成任务的最简单方法是在JFrame 中添加一个JTextField,当您键入文本并按enter 时,该文本将显示为JLabel 中的一个项目。

    要编辑项目,您可以拥有另一个JTextField。你可以把它隐藏起来。当您双击JList 中的某个项目时,它将可见。您可以在那里编辑文本,在您按下回车后,该项目将被更新,JTextField 将再次被隐藏..

    我想这可能对你有帮助..

    【讨论】:

      猜你喜欢
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多