3

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

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

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

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

4

6 回答 6

5

在这里,我JList在左侧和JTextArea右侧的帮助下做了一个简短的示例。我已经习惯于ListSelectionListener更改项目列表。LayoutManager根据您的方便使用。

在此处输入图像描述

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();
            }
        });
    }
}
于 2013-01-31T12:28:50.720 回答
3

您可能想查看这个JTree 示例

于 2013-01-31T11:55:55.260 回答
3

一些示例供参考:

  • FileBrowser在左侧使用 aJTree并在右侧使用嵌套的详细信息面板。

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

  • CheckTableJTable左边显示a ,右边显示a DisplayPanel

于 2013-01-31T11:58:24.000 回答
3

使用JList.addListSelectionListener(ListSelectionListener).

有关更多示例,请参阅如何编写列表选择侦听器

于 2013-01-31T11:58:55.710 回答
3

首先,你还没试过,对吧?Swing 几乎完成了与听众相关的所有输入。查看鼠标监听器,或调整下面给出的 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());

        }
    }
});

我相信您也可以单击一下,...如果不写评论

于 2013-01-31T11:57:39.727 回答
3

看看这个教程。它解释了如何在 Swing 中使用列表,包括注册点击事件所必需的事件处理程序。

于 2013-01-31T11:52:32.117 回答