Swing JList類

2019-10-16 22:10:31

JList類是顯示物件列表並允許使用者選擇一個或多個項的元件。模型ListModel維護列表的內容。

類宣告

以下是javax.swing.JList類的宣告 -

public class JList
   extends JComponent
      implements Scrollable, Accessible

欄位

以下是javax.swing.JList類的欄位 -

  • static int HORIZONTAL_WRAP - 表示「報紙樣式」布局,其中單元格水平流動然後垂直流動。
  • static int VERTICAL - 表示單個列中單元格的垂直布局; 預設布局。
  • static int VERTICAL_WRAP - 表示「報紙樣式」布局,其中單元格垂直然後水平流動。

建構函式

編號 建構函式 描述
1 JList() 使用空的唯讀模型構造JList
2 JList(ListModel dataModel) 構造一個JList,顯示指定的非null模型中的元素。
3 JList(Object[] listData) 構造一個顯示指定陣列中元素的JList
4 JList(Vector<?> listData) 構造一個顯示指定Vector中元素的JList

類方法

下面是Swing JList類中的方法列表。

JList範例

使用編輯器建立以下Java程式:JListExample.java



import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JListExample {
   private JFrame mainFrame;
   private JLabel headerLabel;
   private JLabel statusLabel;
   private JPanel controlPanel;

   public JListExample(){
      prepareGUI();
   }
   public static void main(String[] args){
       JListExample  swingControlDemo = new JListExample();      
      swingControlDemo.showListDemo();
   }
   private void prepareGUI(){
      mainFrame = new JFrame("Java Swing JList 範例");
      mainFrame.setSize(400,400);
      mainFrame.setLayout(new GridLayout(3, 1));

      mainFrame.addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent windowEvent){
            System.exit(0);
         }        
      });    
      headerLabel = new JLabel("", JLabel.CENTER);        
      statusLabel = new JLabel("",JLabel.CENTER);    
      statusLabel.setSize(350,100);

      controlPanel = new JPanel();
      controlPanel.setLayout(new FlowLayout());

      mainFrame.add(headerLabel);
      mainFrame.add(controlPanel);
      mainFrame.add(statusLabel);
      mainFrame.setVisible(true);  
   }
   private void showListDemo(){                                       
      headerLabel.setText("Control in action: JList"); 
      final DefaultListModel fruitsName = new DefaultListModel();

      fruitsName.addElement("Java");
      fruitsName.addElement("Go");
      fruitsName.addElement("MySQL");
      fruitsName.addElement("Python");

      final JList fruitList = new JList(fruitsName);
      fruitList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
      fruitList.setSelectedIndex(0);
      fruitList.setVisibleRowCount(3);        

      JScrollPane fruitListScrollPane = new JScrollPane(fruitList);    
      final DefaultListModel vegName = new DefaultListModel();

      vegName.addElement("Lady Finger");
      vegName.addElement("Onion");
      vegName.addElement("Potato");
      vegName.addElement("Tomato");

      final JList vegList = new JList(vegName);
      vegList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
      vegList.setSelectedIndex(0);
      vegList.setVisibleRowCount(3);        

      JScrollPane vegListScrollPane = new JScrollPane(vegList);       
      JButton showButton = new JButton("Show");

      showButton.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) { 
            String data = "";
            if (fruitList.getSelectedIndex() != -1) {                     
               data = "Fruits Selected: " + fruitList.getSelectedValue(); 
               statusLabel.setText(data);
            }
            if(vegList.getSelectedIndex() != -1){
               data += " Vegetables selected: ";
               for(Object vegetable:vegList.getSelectedValues()){
                  data += vegetable + " ";
               }
            }
            statusLabel.setText(data);
         }
      }); 
      controlPanel.add(fruitListScrollPane);    
      controlPanel.add(vegListScrollPane);    
      controlPanel.add(showButton);    

      mainFrame.setVisible(true);             
   }
}

執行上面範例程式碼,得到以下結果: