我被Jlist困住,从未想过Jlist会那么复杂。
用鼠标左键单击Jlist项目,我想做一些动作。我知道我需要行动倾听者,但我无法让它发挥作用。
在我的特定情况下,在JList中保存了.sql文件的路径。当我点击JList中的项目时,我想从该文件中读取并将其保存到JTextArea。
也许我把监听器放在代码中的错误位置?或者我编码错了?
型号名称=型号
JList Name = SQLScriptList
Jtextarea Name = SQLEditor
使用此代码,我尝试将列表中的项目保存在特定标签或文本框中,以查看操作是否有效。
//Copy from LIST to TextArea
MouseListener mouseListener = new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 1) {
String selectedItem = (String) SQLScriptList.getSelectedValue();
// add selectedItem to your second list.
DefaultListModel model = (DefaultListModel) SQLScriptList.getModel();
if (model == null) {
//model = new DefaultListModel();
SQLScriptList.setModel(model);
}
model.addElement(selectedItem);
}
SQLScriptList.addMouseListener(mouseListener);
}
//list.addMouseListener(mouseListener);
};
这是我的案例中的解决方案:
private void SQLScriptListMouseClicked(java.awt.event.MouseEvent evt) {
JList list = (JList) evt.getSource();
if (evt.getClickCount() == 2) {
int index = list.locationToIndex(evt.getPoint()); //GET INDEX 0,1,2,3
try {
FileReader reader = new FileReader(files[index]);
SQLEditor.read(reader, files[index]); //Object of JTextArea
} catch (Exception e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:1)
当我点击JList中的项目时,我想从该文件中读取并将其保存到JTextArea。
通常只需单击鼠标即可完成此操作。
通常在用户:
时调用Action对于此类处理,请检查List Action,以便在上述任何一种情况下提供Action
。
否则你应该使用MouseListener
,而不是上面评论中建议的ListSelectionListener,因为用户应该能够使用向下/向上箭头键浏览列表中的项目而不会导致操作被调用。阅读How to Write a MouseListener上的Swing教程中的部分以获取工作示例。