您可以
ListSelectionListener
从列表中删除所有内容,进行选择,然后再次添加它们。您可以
ListSelectionModel
使用不引发事件的方法来创建自己的方法,然后将其设置为选择模型JList
,然后使用getSelectionModel().yourSelectIndexMethod(index)
。您还可以将所有其他选择方法转移到列表中,如果通过其他方式选择页面,则只需找到相应的条目,然后在列表中选择项目即可。这样,选择项目并加载页面一次。
选项2的代码:
public class ListTest extends JPanel{private static final String[] items = new String[]{"1", "2", "3"};private JList mylist;private JComboBox myCombo;private Jtextarea myTA;public ListTest() { setLayout(new BorderLayout()); myCombo = new JComboBox(items); myCombo.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e){ valueSelectedCombo(myCombo.getSelectedIndex()); } }); JPanel pn = new JPanel(); pn.setLayout(new BoxLayout(pn, BoxLayout.X_AXIS)); pn.add(myCombo); pn.add(Box.createHorizontalGlue()); pn.add(new JButton(new AbstractAction("Clear"){ @Override public void actionPerformed(ActionEvent e){ myTA.setText(""); } })); add(pn, BorderLayout.NORTH); add(new JScrollPane(getJList()), BorderLayout.WEST); add(new JScrollPane(myTA = new Jtextarea()), BorderLayout.CENTER);}private void valueSelectedList(int index){ myTA.setText(myTA.getText() + "n" + items[index]);}private void valueSelectedCombo(int index){ myTA.setText(myTA.getText() + "n" + items[index]); ((CustomSelectionModel)mylist.getSelectionModel()).setSelectionSilent(index);}private JList getJList(){ if (mylist == null){ mylist = new JList(items); mylist.setSelectionModel(new CustomSelectionModel()); mylist.addListSelectionListener(new ListSelectionListener(){ @Override public void valueChanged(ListSelectionEvent e){ if (!e.getValueIsAdjusting()){ valueSelectedList(mylist.getSelectedIndex()); } } }); mylist.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); mylist.setPreferredSize(new Dimension(100, 106)); } return mylist;}private static class CustomSelectionModel extends DefaultListSelectionModel{ private boolean isSilent = false; public void setSelectionSilent(int firstIndex){ isSilent = true; setSelectionInterval(firstIndex, firstIndex); isSilent = false; } protected void firevalueChanged(int firstIndex, int lastIndex, boolean isAdjusting){ if (isSilent){ return; } super.firevalueChanged(firstIndex, lastIndex, isAdjusting); }}public static void main(String[] args){ Jframe frame = new Jframe("test"); frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE); // Add content to the window. frame.add(new ListTest()); // Display the window. frame.pack(); frame.setSize(300, 200); frame.setVisible(true);}}


