我想創建一個有兩個窗格的用戶界面。創建一個條目列表,並使每個條目可點擊
在左側窗格中,我顯示文件列表,右側窗格顯示內容。
現在,我想在左窗格中的文件列表看起來像一個正常的列表。但是,當我單擊此列表中的一個條目時,該特定文件的內容應顯示在右側窗格中。
如何使用Swing實現這一目標?
我想創建一個有兩個窗格的用戶界面。創建一個條目列表,並使每個條目可點擊
在左側窗格中,我顯示文件列表,右側窗格顯示內容。
現在,我想在左窗格中的文件列表看起來像一個正常的列表。但是,當我單擊此列表中的一個條目時,該特定文件的內容應顯示在右側窗格中。
如何使用Swing實現這一目標?
結帳this tutorial。它解釋瞭如何使用Swing中的列表,其中包括event handlers,它們是註冊點擊事件所必需的。
你可能想看看這個JTree example。
首先,你還沒有試過,對不對? Swing幾乎可以處理與聽衆相關的所有輸入內容。退房的鼠標偵聽器,或調整awnser得到下述
https://stackoverflow.com/a/4344762/258418
對於completness我引用在這裏:
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());
}
}
});
我相信你可以把它採取單一的點擊以及.. 。如果不寫評論
參考一些例子:
FileBrowser
在左側使用JTree
,在右側使用嵌套的細節面板。
ImageDisplay
在左側嵌入自定義JFileChooser
,並在右側顯示可滾動的圖像。
CheckTable
在左側顯示JTable
,在右側顯示。
使用JList.addListSelectionListener(ListSelectionListener)
。
有關更多examples的信息,請參見How to Write a List Selection Listener。
這裏我做了一個簡短的例子,在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 [sscce](http://sscce.org/)。注意'pack()'_before_'setVisible()'並且更加節省使用空白。另外考慮'EXIT_ON_CLOSE'。 – trashgod
@trashgod感謝您的編輯。 ''JList.addListSelectionListener'一旦你點擊就被調用2次,但是,你不能僅僅通過查看接口來搞清楚,因爲我只是在'JTextArea'上設置文本,任何原因?''EXIT_ON_CLOSE'編輯:) –
打印'evt.getValueIsAdjusting()',並在點擊並拖動列表時進行觀察。 – trashgod
該文件是由程序的其他部分產生。所以,我確信這些文件是可讀的ASCII文件。 – Hashken