MVC&x2B;SWING和ListSelectionListener
我试图做的是从我的SWING视图MVC&x2B;SWING和ListSelectionListener,swing,model-view-controller,jlist,selectedvalue,Swing,Model View Controller,Jlist,Selectedvalue,我试图做的是从我的SWING视图JList中获取所选的值到我的控制器类,这样我就可以在控制器中使用这些数据。 为了简单起见,我手动将两个元素添加到我的JList(“项目1”、“项目2”(因此我有一些东西要传递),我似乎在访问它时遇到了问题。我的视图有一个JList,带有一个ListSelectionListener,我通过我的main将其传递给我的控制器: public class AppMain { private AppView appView = null; publi
JList
中获取所选的值到我的控制器类,这样我就可以在控制器中使用这些数据。
为了简单起见,我手动将两个元素添加到我的JList(“项目1”、“项目2”(因此我有一些东西要传递),我似乎在访问它时遇到了问题。我的视图有一个JList
,带有一个ListSelectionListener
,我通过我的main将其传递给我的控制器:
public class AppMain {
private AppView appView = null;
public static void main(String[] args) {
AppView appView = new AppView();
Controller controller = new Controller(appView);
}
public AppView getView() {
return appView;
}
}
我的看法是:
import javax.swing.event.ListSelectionListener;
public class AppView extends javax.swing.JFrame {
public AppView() {
initComponents();
this.setVisible(true);
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
ValueList = new javax.swing.JList();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
ValueList.setModel(new javax.swing.AbstractListModel() {
String[] strings = { "Item 1", "Item 2", " " };
public int getSize() { return strings.length; }
public Object getElementAt(int i) { return strings[i]; }
});
jScrollPane1.setViewportView(ValueList);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(75, 75, 75)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(63, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(45, 45, 45)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(27, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
// Variables declaration - do not modify
private javax.swing.JList ValueList;
private javax.swing.JScrollPane jScrollPane1;
// End of variables declaration
public void ListSelectionListener(ListSelectionListener selectionListener) {
ValueList.addListSelectionListener(selectionListener);
}
}
不,我想在控制器中获取selectedValue。我似乎无法掌握它。而且这会打印Foo
3次,我也无法找到原因
如中所示,当用户先选择一个条目,然后再选择另一个条目时,可能会生成多个条目。请在选择稳定时尝试检查
if (!e.getValueIsAdjusting()) {
// examine result
ListSelectionModel lsm = (ListSelectionModel)e.getSource();
int minIndex = lsm.getMinSelectionIndex();
int maxIndex = lsm.getMaxSelectionIndex();
…
}
由于这确实解决了拥有多个
ListSelectionEvents
的问题,我描述的另一个问题对我来说仍然很模糊。如何从我的视图列表中获取值到我的控制器。演示使用e.getSource()
获取触发模型和所选索引。
if (!e.getValueIsAdjusting()) {
// examine result
ListSelectionModel lsm = (ListSelectionModel)e.getSource();
int minIndex = lsm.getMinSelectionIndex();
int maxIndex = lsm.getMaxSelectionIndex();
…
}