创建条目列表并使每个条目可单击

时间:2013-01-31 11:51:30

标签: java swing list jlist jtree

我正在尝试创建一个有两个窗格的UI。

在左侧窗格中,我显示文件列表,右侧窗格显示内容。

现在,我希望左窗格中的文件列表看起来像普通列表。但是当我单击此列表中的条目时,特定文件的内容应显示在右侧窗格中。

如何使用Swing实现这一目标?

6 个答案:

答案 0 :(得分:5)

在左边的JList和右边的JTextArea的帮助下,我做了一个简短的例子。我使用ListSelectionListener来更改项目列表。根据您的方便使用LayoutManager

enter image description here

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class JListTest {

    private JList jList1;
    private JPanel jPanel1;
    private JTextArea jTextArea1;

    public JListTest() {
        initComponents();
    }

    private void initComponents() {
        JFrame f = new JFrame();
        jPanel1 = new JPanel();
        jList1 = new JList();
        jTextArea1 = new JTextArea();

        jList1.setModel(new AbstractListModel() {

            String[] strings = {"Item 1", "Item 2"};

            @Override
            public int getSize() {
                return strings.length;
            }

            @Override
            public Object getElementAt(int i) {
                return strings[i];
            }
        });
        jList1.addListSelectionListener(new ListSelectionListener() {

            @Override
            public void valueChanged(ListSelectionEvent evt) {
                jList1ValueChanged(evt);
            }
        });

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);

        jPanel1.add(jList1);
        jPanel1.add(jTextArea1);
         f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        f.add(jPanel1);
        f.pack();
        f.setVisible(true);
    }

    private void jList1ValueChanged(javax.swing.event.ListSelectionEvent evt) {
        //set text on right here
        String s = (String) jList1.getSelectedValue();
        if (s.equals("Item 1")) {
            jTextArea1.setText("You clicked on list 1");
        }
        if (s.equals("Item 2")) {
            jTextArea1.setText("You clicked on list 2");
        }
    }

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

            @Override
            public void run() {
                new JListTest();
            }
        });
    }
}

答案 1 :(得分:3)

结帐this tutorial。它解释了如何在Swing中使用列表,包括注册点击事件所需的event handlers

答案 2 :(得分:3)

您可能希望查看此JTree example

答案 3 :(得分:3)

参考的一些例子:

  • FileBrowser左侧使用JTree,右侧使用嵌套详细信息面板。

  • ImageDisplay在左侧嵌入自定义JFileChooser,并在右侧显示可滚动图片。

  • CheckTable左侧显示JTable,右侧显示DisplayPanel

答案 4 :(得分:3)

使用JList.addListSelectionListener(ListSelectionListener)

有关How to Write a List Selection Listener的更多信息,请参阅examples

答案 5 :(得分:2)

首先,你还没有尝试过,对吗? Swing几乎完成了与listeneres相关的所有输入。检查鼠标监听器,或调整下面的awnser

https://stackoverflow.com/a/4344762/258418

为了完整性,我在这里引用它:

String[] items = {"A", "B", "C", "D"};
JList list = new JList(items);

list.addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent evt) {
        JList list = (JList)evt.getSource();
        if (evt.getClickCount() == 2) {
            int index = list.locationToIndex(evt.getPoint());
        } else if (evt.getClickCount() == 3) {   // Triple-click
            int index = list.locationToIndex(evt.getPoint());

        }
    }
});

我相信你也可以点击一下,如果没有写评论