Java Tutorial/Swing/JList
Содержание
- 1 A container for pseud code
- 2 Adding Element-Level Tooltips to List Items
- 3 Arranging Items in a JList Component
- 4 Bench mark for JList
- 5 Creating JList Components
- 6 Customizing a JList Look and Feel
- 7 Detecting Double and Triple Clicks on an Item in a JList Component
- 8 Get index of first visible item
- 9 Get index of last visible item
- 10 JList
- 11 Listening to JList Events with a ListSelectionListener
- 12 ListSelectionModel Modes
- 13 Methods are used to find an item
- 14 Modifying the Data Model
- 15 public Point indexToLocation(int index): returning a Point as the origin of the provided index
- 16 Selection event for double-clicking an item in the list
- 17 Selection Methods
- 18 Set selected index
- 19 Setting a Tool Tip for an Item in a JList Component
- 20 Setting the number of visible rows with setVisibleRowCount()
- 21 Sharing the Data Model for a JComboBox and JList
- 22 Storing value in Vector and adding them into JList
- 23 These methods can be used to find the range of visible items
- 24 To make multiple list selections, you can use the anchor and lead indices of the selection items.
- 25 To programmatically move the list to the top
- 26 Use drag and drop to reorder a list
- 27 Using a Custom Data Model
- 28 Using DefaultListModel to control the Data in a JList
- 29 Using JList
- 30 Using ListDataListener to listen to ListModel Events
A container for pseud code
<source lang="java">
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.border.Border; public class JListBackground extends JPanel {
private static final Color lightBlue = new Color(153, 204, 255); public JListBackground() { super(); setBackground(lightBlue); } public static void addComponentsToPane(Container pane) { String[] bruteForceCode = { "int count = 0", "int m = mPattern.length();", "int n = mSource .length();", "outer:", " ++count;", " }", " return count;", "}" }; JList list = new JList(bruteForceCode); Border etch = BorderFactory.createEtchedBorder(); list.setBorder(BorderFactory.createTitledBorder(etch, "Brute Force Code")); JPanel listPanel = new JPanel(); listPanel.add(list); listPanel.setBackground(lightBlue); list.setBackground(lightBlue); pane.add(listPanel, BorderLayout.CENTER); pane.setBackground(lightBlue); } public static void main(String[] args) { JFrame frame = new JFrame("Brute Force Algorithm"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); addComponentsToPane(frame.getContentPane()); frame.pack(); frame.setSize(800, 600); frame.setVisible(true); }
}</source>
Adding Element-Level Tooltips to List Items
<source lang="java">
import java.awt.Point; import java.awt.event.MouseEvent; import java.util.Properties; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; import javax.swing.ToolTipManager; public class PropertiesList extends JList {
public PropertiesList() { super(new String[]{ "A", "B", "C", "D", "E", "F", "G", "H" }); ToolTipManager.sharedInstance().registerComponent(this); } public String getToolTipText(MouseEvent event) { Point p = event.getPoint(); int location = locationToIndex(p); String tip = (String) getModel().getElementAt(location); return tip; } public static void main(String args[]) { JFrame frame = new JFrame("Custom Tip Demo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); PropertiesList list = new PropertiesList(); JScrollPane scrollPane = new JScrollPane(list); frame.add(scrollPane); frame.setSize(300, 300); frame.setVisible(true); }
}</source>
Arranging Items in a JList Component
<source lang="java">
import javax.swing.JList; import javax.swing.JScrollPane; public class Main {
public static void main(String[] argv) throws Exception { String[] items = { "A", "B", "C", "D" }; JList list = new JList(items); JScrollPane scrollingList = new JScrollPane(list); // The default layout orientation is JList.VERTICAL int orient = list.getLayoutOrientation(); // Change the layout orientation to left-to-right, top-to-bottom list.setLayoutOrientation(JList.HORIZONTAL_WRAP); }
}</source>
Bench mark for JList
<source lang="java">
import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.AbstractListModel; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; public class JBenchFrame extends JFrame {
BorderLayout borderLayout1 = new BorderLayout(); JList list1 = new JList(); JButton fillButton = new JButton(); public static void main(String[] args) { JBenchFrame bm = new JBenchFrame(); } public JBenchFrame() { this.getContentPane().setLayout(borderLayout1); this.setSize(new Dimension(400, 300)); fillButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ListData ld = new ListData(); long tmStart = System.currentTimeMillis(); list1.setModel(ld); list1.repaint(); long tmEnd = System.currentTimeMillis(); System.out.println(tmEnd - tmStart); } }); fillButton.setText("Fill"); this.getContentPane().add(new JScrollPane(list1), BorderLayout.CENTER); this.getContentPane().add(fillButton, BorderLayout.SOUTH); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); }
} class ListData extends AbstractListModel {
String[] strings = new String[10000]; public ListData() { for (int i = 0; i < 10000; i++) { strings[i] = "bob" + i; } } public int getSize() { return strings.length; } public Object getElementAt(int index) { return strings[index]; }
}</source>
Creating JList Components
<source lang="java">
public JList() JList jlist = new JList(); public JList(Object listData[]) String labels[] = { "A", "B", "C", "D", "E", "F", "G", "H"}; JList jlist = new JList(labels); public JList(Vector listData) Vector vector = aBufferedImage.getSources(); JList jlist = new JList(vector); public JList(ListModel model) ResultSet results = aJDBCStatement.executeQuery("SELECT colName FROM tableName"); DefaultListModel model = new DefaultListModel(); while (result.next()){
model.addElement(result.getString(1));
} JList jlist = new JList(model);</source>
- To improve performance, you can set the fixedCellHeight and fixedCellWidth properties.
- Setting these properties is one way to avoid having the JList ask each cell for its rendered size.
Customizing a JList Look and Feel
Property StringObject TypeList.actionMapActionMapList.backgroundColorList.borderBorderList.cellHeightIntegerList.cellRendererListCellRendererList.focusCellHighlightBorderBorderList.focusInputMapInputMapList.focusInputMap.RightToLeftInputMapList.fontFontList.foregroundColorList.lockToPositionOnScrollBooleanList.rendererUseListColors BooleanList.rendererUseUIBorder BooleanList.selectionBackgroundColorList.selectionForegroundColorList.timeFactorLongListUIString
Detecting Double and Triple Clicks on an Item in a JList Component
<source lang="java">
import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JList; public class Main {
public static void main(String[] argv) throws Exception { 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) { // Double-click int index = list.locationToIndex(evt.getPoint()); } else if (evt.getClickCount() == 3) { // Triple-click int index = list.locationToIndex(evt.getPoint()); } } }); }
}</source>
Get index of first visible item
<source lang="java">
import javax.swing.JList; public class Main {
public static void main(String[] argv) throws Exception { String[] items = { "A", "B", "C", "D" }; JList list = new JList(items); int itemIx = list.getFirstVisibleIndex(); if (itemIx < 0) { // List is either not visible or there are no items } }
}</source>
Get index of last visible item
<source lang="java">
import javax.swing.JList; public class Main {
public static void main(String[] argv) throws Exception { String[] items = { "A", "B", "C", "D" }; JList list = new JList(items); int itemIx = list.getLastVisibleIndex(); }
}</source>
JList
The JList component is the basic Swing component for selecting one or more items from a set of choices. Three key elements and their implementations define the JList structure:
- A data model for holding the JList data, as defined by the ListModel interface
- A cell renderer for drawing the elements of the JList, as described by the ListCellRenderer interface
- A selection model for selecting elements of the JList, as described by the ListSelectionModel interface
Listening to JList Events with a ListSelectionListener
If you want to know when elements of a JList have been selected, you need to attach a ListSelectionListener to the JList or the ListSelectionModel.
<source lang="java">
public interface ListSelectionListener extends EventListener {
public void valueChanged(ListSelectionEvent e);
}</source>
ListSelectionModel Modes
By default, every JList component is in multiple-selection mode.
ModeDescriptionListSelectionModel.SINGLE_SELECTIONOne item at a time can be selected.ListSelectionModel.SINGLE_INTERVAL_SELECTIONOne contiguous range of items can be selected.ListSelectionModel.MULTIPLE_INTERVAL_SELECTIONAny set of ranges can be selected.
<source lang="java">
import java.awt.BorderLayout; import javax.swing.DefaultListModel; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; import javax.swing.ListSelectionModel; public class SelectionModeDemo {
public static void main(String args[]) { JFrame frame = new JFrame("Sizing Samples"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); DefaultListModel model = new DefaultListModel(); model.ensureCapacity(100); for (int i = 0; i < 100; i++) { model.addElement(Integer.toString(i)); } JList jlist2 = new JList(model); jlist2.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION ); JScrollPane scrollPane2 = new JScrollPane(jlist2); frame.add(scrollPane2, BorderLayout.CENTER); frame.setSize(300, 350); frame.setVisible(true); }
}</source>
Methods are used to find an item
<source lang="java">
import javax.swing.JList; public class Main {
public static void main(String[] argv) throws Exception { String[] items = { "A", "B", "C", "D" }; JList list = new JList(items); String prefix = "b"; int start = 0; int itemIx = list.getNextMatch(prefix, start, javax.swing.text.Position.Bias.Forward); }
}</source>
Modifying the Data Model
<source lang="java">
import java.awt.BorderLayout; import javax.swing.DefaultListModel; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; public class ModifyModelSample {
static String labels[] = { "A", "B", "C", "D", "E", "F", "G" }; public static void main(String args[]) { JFrame frame = new JFrame("Modifying Model"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Fill model final DefaultListModel model = new DefaultListModel(); for (int i = 0, n = labels.length; i < n; i++) { model.addElement(labels[i]); } JList jlist = new JList(model); JScrollPane scrollPane1 = new JScrollPane(jlist); frame.add(scrollPane1, BorderLayout.CENTER); frame.setSize(640, 300); frame.setVisible(true); }
}</source>
public Point indexToLocation(int index): returning a Point as the origin of the provided index
<source lang="java">
import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; public class JListLocationToIndexSample {
public static void main(String args[]) { String labels[] = { "A", "B", "C", "D", "E", "F", "G", "H" }; JFrame frame = new JFrame("Selecting JList"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JList jlist = new JList(labels); JScrollPane scrollPane1 = new JScrollPane(jlist); frame.add(scrollPane1, BorderLayout.CENTER); System.out.println(jlist.indexToLocation(5)); frame.setSize(350, 200); frame.setVisible(true); }
}</source>
Selection event for double-clicking an item in the list
public int locationToIndex(Point location) in JList: map screen coordinates to list elements
<source lang="java">
import java.awt.BorderLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; public class JListLocationToIndexSample {
public static void main(String args[]) { String labels[] = { "A", "B", "C", "D", "E", "F", "G", "H" }; JFrame frame = new JFrame("Selecting JList"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JList jlist = new JList(labels); JScrollPane scrollPane1 = new JScrollPane(jlist); frame.add(scrollPane1, BorderLayout.CENTER); MouseListener mouseListener = new MouseAdapter() { public void mouseClicked(MouseEvent mouseEvent) { JList theList = (JList) mouseEvent.getSource(); if (mouseEvent.getClickCount() == 2) { int index = theList.locationToIndex(mouseEvent.getPoint()); if (index >= 0) { Object o = theList.getModel().getElementAt(index); System.out.println("Double-clicked on: " + o.toString()); } } } }; jlist.addMouseListener(mouseListener); frame.setSize(350, 200); frame.setVisible(true); }
}</source>
Selection Methods
The class JList supports a list of set and get methods to deal with various selection attributes:
<source lang="java">
void setSelectedIndex(int index)
void setSelectedIndices(int[] indices) void setSelectedValue(Object object, boolean shouldScroll)</source>
Set selected index
You can set an initial selection (s) by using the setSelectedIndex and setSelectedIndices methods (the indexing is zero-based, so index 0 refers to the first option in the JList).
<source lang="java">
public void setSelectedIndex (int index) public void setSelectedIndices (int[] indices)</source>
Setting a Tool Tip for an Item in a JList Component
<source lang="java">
import java.awt.event.MouseEvent; import javax.swing.JList; public class Main {
public static void main(String[] argv) throws Exception { String[] items = { "A", "B", "C", "D" }; JList list = new JList(items) { // This method is called as the cursor moves within the list. public String getToolTipText(MouseEvent evt) { // Get item index int index = locationToIndex(evt.getPoint()); // Get item Object item = getModel().getElementAt(index); // Return the tool tip text return "tool tip for " + item; } }; }
}</source>
Setting the number of visible rows with setVisibleRowCount()
<source lang="java">
import java.awt.BorderLayout; import javax.swing.DefaultListModel; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; public class SizingSamples {
public static void main(String args[]) { String labels[] = { "A", "B", "C", "D", "E", "F" ,"G","H","I","J"}; JFrame frame = new JFrame("Sizing Samples"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JList jlist1 = new JList(labels); jlist1.setVisibleRowCount(4); DefaultListModel model = new DefaultListModel(); model.ensureCapacity(100); for (int i = 0; i < 100; i++) { model.addElement(Integer.toString(i)); } JScrollPane scrollPane1 = new JScrollPane(jlist1); frame.add(scrollPane1, BorderLayout.NORTH); JList jlist2 = new JList(model); jlist2.setVisibleRowCount(4); jlist2.setFixedCellHeight(12); jlist2.setFixedCellWidth(200); JScrollPane scrollPane2 = new JScrollPane(jlist2); frame.add(scrollPane2, BorderLayout.CENTER); JList jlist3 = new JList(labels); jlist3.setVisibleRowCount(4); frame.add(jlist3, BorderLayout.SOUTH); frame.setSize(300, 350); frame.setVisible(true); }
}</source>
Sharing the Data Model for a JComboBox and JList
<source lang="java">
import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; public class SharedDataBetweenComboBoxAndListSample {
public static void main(String args[]) { final String labels[] = { "A", "B", "C", "D", "E", "F", "G" }; final DefaultComboBoxModel model = new DefaultComboBoxModel(labels); JFrame frame = new JFrame("Shared Data"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); JComboBox comboBox1 = new JComboBox(model); comboBox1.setEditable(true); panel.add(comboBox1); frame.add(panel, BorderLayout.NORTH); JList jlist = new JList(model); JScrollPane scrollPane = new JScrollPane(jlist); frame.add(scrollPane, BorderLayout.CENTER);
JButton button = new JButton("Add"); frame.add(button, BorderLayout.SOUTH); ActionListener actionListener = new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { model.addElement("New Added"); } }; button.addActionListener(actionListener); frame.setSize(300, 200); frame.setVisible(true); }
}</source>
Storing value in Vector and adding them into JList
<source lang="java">
import java.util.Vector; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; public class StoringvalueinVectorandaddingthemintoJList {
public static void main(String[] a) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Vector months = new Vector(); JList list = new JList(months); months.addElement("January"); months.addElement("December"); frame.add(new JScrollPane(list)); frame.setSize(300, 200); frame.setVisible(true); }
}</source>
These methods can be used to find the range of visible items
<source lang="java">
import javax.swing.JList; public class Main {
public static void main(String[] argv) throws Exception { String[] items = { "A", "B", "C", "D" }; JList list = new JList(items); // Get number of visible items int visibleSize = list.getVisibleRowCount(); }
}</source>
To make multiple list selections, you can use the anchor and lead indices of the selection items.
<source lang="java">
void setAnchorSelectionIndex(int index)
void setLeadSelectionIndex(int index)</source>
To programmatically move the list to the top
The firstVisibleIndex and lastVisibleIndex properties allow you to find out which choices are currently visible. To request that a specific element be made visible, use the public void ensureIndexIsVisible(int index) method.
<source lang="java">
import java.awt.BorderLayout; import javax.swing.DefaultListModel; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; public class SizingSamples {
public static void main(String args[]) { JFrame frame = new JFrame("Sizing Samples"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); DefaultListModel model = new DefaultListModel(); model.ensureCapacity(100); for (int i = 0; i < 100; i++) { model.addElement(Integer.toString(i)); } JList jlist2 = new JList(model); JScrollPane scrollPane2 = new JScrollPane(jlist2); frame.add(scrollPane2, BorderLayout.CENTER); frame.setSize(300, 350); frame.setVisible(true); jlist2.ensureIndexIsVisible(50); }
}</source>
Use drag and drop to reorder a list
<source lang="java">
import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.awt.dnd.DnDConstants; import java.awt.dnd.DragGestureEvent; import java.awt.dnd.DragGestureListener; import java.awt.dnd.DragGestureRecognizer; import java.awt.dnd.DragSource; import java.awt.dnd.DragSourceDragEvent; import java.awt.dnd.DragSourceDropEvent; import java.awt.dnd.DragSourceEvent; import java.awt.dnd.DragSourceListener; import javax.swing.DefaultListModel; import javax.swing.DropMode; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; import javax.swing.TransferHandler; public class DragDropList extends JList {
DefaultListModel model; public DragDropList() { super(new DefaultListModel()); model = (DefaultListModel) getModel(); setDragEnabled(true); setDropMode(DropMode.INSERT); setTransferHandler(new MyListDropHandler(this)); new MyDragListener(this); model.addElement("a"); model.addElement("b"); model.addElement("c"); } public static void main(String[] a){ JFrame f = new JFrame(); f.add(new JScrollPane(new DragDropList())); f.setSize(300,300); f.setVisible(true); }
} class MyDragListener implements DragSourceListener, DragGestureListener {
DragDropList list; DragSource ds = new DragSource(); public MyDragListener(DragDropList list) { this.list = list; DragGestureRecognizer dgr = ds.createDefaultDragGestureRecognizer(list, DnDConstants.ACTION_MOVE, this); } public void dragGestureRecognized(DragGestureEvent dge) { StringSelection transferable = new StringSelection(Integer.toString(list.getSelectedIndex())); ds.startDrag(dge, DragSource.DefaultCopyDrop, transferable, this); } public void dragEnter(DragSourceDragEvent dsde) { } public void dragExit(DragSourceEvent dse) { } public void dragOver(DragSourceDragEvent dsde) { } public void dragDropEnd(DragSourceDropEvent dsde) { if (dsde.getDropSuccess()) { System.out.println("Succeeded"); } else { System.out.println("Failed"); } } public void dropActionChanged(DragSourceDragEvent dsde) { }
} class MyListDropHandler extends TransferHandler {
DragDropList list; public MyListDropHandler(DragDropList list) { this.list = list; } public boolean canImport(TransferHandler.TransferSupport support) { if (!support.isDataFlavorSupported(DataFlavor.stringFlavor)) { return false; } JList.DropLocation dl = (JList.DropLocation) support.getDropLocation(); if (dl.getIndex() == -1) { return false; } else { return true; } } public boolean importData(TransferHandler.TransferSupport support) { if (!canImport(support)) { return false; } Transferable transferable = support.getTransferable(); String indexString; try { indexString = (String) transferable.getTransferData(DataFlavor.stringFlavor); } catch (Exception e) { return false; } int index = Integer.parseInt(indexString); JList.DropLocation dl = (JList.DropLocation) support.getDropLocation(); int dropTargetIndex = dl.getIndex(); System.out.println(dropTargetIndex + " : "); System.out.println("inserted"); return true; }
}</source>
Using a Custom Data Model
<source lang="java">
import java.awt.BorderLayout; import java.util.ArrayList; import java.util.Collection; import javax.swing.AbstractListModel; import javax.swing.ruboBoxModel; import javax.swing.JComboBox; import javax.swing.JFrame; class ArrayListComboBoxModel extends AbstractListModel implements ComboBoxModel {
private Object selectedItem; private ArrayList anArrayList; public ArrayListComboBoxModel(ArrayList arrayList) { anArrayList = arrayList; } public Object getSelectedItem() { return selectedItem; } public void setSelectedItem(Object newValue) { selectedItem = newValue; } public int getSize() { return anArrayList.size(); } public Object getElementAt(int i) { return anArrayList.get(i); }
} public class ArrayListComboBoxModelDemo {
public static void main(String args[]) { JFrame frame = new JFrame("ArrayListComboBoxModel"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ArrayList<Object> arrayList = new ArrayList<Object>(); arrayList.add("A"); arrayList.add("B"); arrayList.add("C"); ArrayListComboBoxModel model = new ArrayListComboBoxModel(arrayList); JComboBox comboBox = new JComboBox(model); frame.add(comboBox, BorderLayout.NORTH); frame.setSize(300, 225); frame.setVisible(true); }
}</source>
Using DefaultListModel to control the Data in a JList
<source lang="java">
import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; public class ModifyModelSampleModelAction {
static String labels[] = { "A", "B", "C", "D", "E", "F", "G" }; public static void main(String args[]) { JFrame frame = new JFrame("Modifying Model"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Fill model final DefaultListModel model = new DefaultListModel(); for (int i = 0, n = labels.length; i < n; i++) { model.addElement(labels[i]); } JList jlist = new JList(model); JScrollPane scrollPane1 = new JScrollPane(jlist); frame.add(scrollPane1, BorderLayout.CENTER); JButton jb = new JButton("add F"); jb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { model.add(0, "First"); model.clear(); model.addElement("Last"); model.addElement("Last"); model.addElement("Last"); model.addElement("Last"); int size = model.getSize(); model.insertElementAt("Middle", size / 2); model.set(0, "New First"); model.setElementAt("New Last", size - 1); model.remove(0); // model.removeAllElements(); // model.removeElement("Last"); // model.removeElementAt(size / 2);
// model.removeRange(0, size / 2);
} }); frame.add(jb, BorderLayout.SOUTH); frame.setSize(640, 300); frame.setVisible(true); }
}</source>
Using JList
<source lang="java">
import java.awt.FlowLayout; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; public class JListTest {
public static void main(String[] args) { JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame("JList Test"); frame.setLayout(new FlowLayout()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); String[] selections = { "green", "red", "orange", "dark blue" }; JList list = new JList(selections); list.setSelectedIndex(1); System.out.println(list.getSelectedValue()); frame.add(new JScrollPane(list)); frame.pack(); frame.setVisible(true); }
}</source>
Using ListDataListener to listen to ListModel Events
To find out when the contents of the list model change, you can register a ListDataListener with the model.
ListDataEvent Type Constants
Type ConstantMethodCONTENTS_CHANGEDcontentsChanged()INTERVAL_ADDEDintervalAdded()INTERVAL_REMOVEDintervalRemoved()
<source lang="java">
import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; import javax.swing.event.ListDataEvent; import javax.swing.event.ListDataListener; public class ModifyModelSampleListDataListener {
static String labels[] = { "A", "B", "C", "D", "E", "F", "G" }; public static void main(String args[]) { JFrame frame = new JFrame("Modifying Model"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Fill model final DefaultListModel model = new DefaultListModel(); for (int i = 0, n = labels.length; i < n; i++) { model.addElement(labels[i]); } JList jlist = new JList(model); JScrollPane scrollPane1 = new JScrollPane(jlist); frame.add(scrollPane1, BorderLayout.CENTER); ListDataListener listDataListener = new ListDataListener() { public void contentsChanged(ListDataEvent listDataEvent) { appendEvent(listDataEvent); } public void intervalAdded(ListDataEvent listDataEvent) { appendEvent(listDataEvent); } public void intervalRemoved(ListDataEvent listDataEvent) { appendEvent(listDataEvent); } private void appendEvent(ListDataEvent listDataEvent) { switch (listDataEvent.getType()) { case ListDataEvent.CONTENTS_CHANGED: System.out.println("Type: Contents Changed"); break; case ListDataEvent.INTERVAL_ADDED: System.out.println("Type: Interval Added"); break; case ListDataEvent.INTERVAL_REMOVED: System.out.println("Type: Interval Removed"); break; } System.out.println(", Index0: " + listDataEvent.getIndex0()); System.out.println(", Index1: " + listDataEvent.getIndex1()); DefaultListModel theModel = (DefaultListModel) listDataEvent.getSource(); System.out.println(theModel); } }; model.addListDataListener(listDataListener); JButton jb = new JButton("add F"); jb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { model.add(0, "First"); } }); frame.add(jb,BorderLayout.SOUTH); frame.setSize(640, 300); frame.setVisible(true); }
}</source>