我正在尝试创建一个有两个窗格的UI。
在左侧窗格中,我显示文件列表,右侧窗格显示内容。
现在,我希望左窗格中的文件列表看起来像普通列表。但是当我单击此列表中的条目时,特定文件的内容应显示在右侧窗格中。
如何使用Swing实现这一目标?
答案 0 :(得分: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();
}
});
}
}
答案 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());
}
}
});
我相信你也可以点击一下,如果没有写评论