欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java Swing中JList選擇事件監(jiān)聽器ListSelectionListener用法示例

 更新時間:2017年11月14日 12:09:12   作者:pzy4447  
這篇文章主要介紹了Java Swing中JList選擇事件監(jiān)聽器ListSelectionListener用法,結(jié)合具體實(shí)例形式分析了中JList選擇事件監(jiān)聽器ListSelectionListener的功能、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Java Swing中JList選擇事件監(jiān)聽器ListSelectionListener用法。分享給大家供大家參考,具體如下:

當(dāng)JList中的元素被選中時,選擇事件將被觸發(fā)。對于JTable也是一樣,你可以把它看做是多個并列的JList。那么,如果程序需要對該事件做出響應(yīng),需要以下步驟:

(1)創(chuàng)建一個實(shí)現(xiàn)了 ListSelectionListener的監(jiān)聽器;
(2)使用JList或selectionModel的addListSelectionListener添加監(jiān)聽器;
(3)在監(jiān)聽器的valueChanged方法添加響應(yīng)代碼。

在響應(yīng)代碼中需要注意的是getValueIsAdjusting值的判斷。測試表明,每當(dāng)我們進(jìn)行選擇時,valueChanged方法都會被激活多次,其中,在最后的鼠標(biāo)操作中,getValueIsAdjusting值為false,而在一系列中間操作中,該值均為true。比如說,用鼠標(biāo)連續(xù)劃過一串元素時,會有一系列g(shù)etValueIsAdjusting為true的valueChanged方法激活,且最后一次為false。而我們對選擇事件的判定一般是以最后接觸為準(zhǔn),因此這里對getValueIsAdjusting值進(jìn)行一個判斷。

常用方法如下:

getLeadSelectionIndex()
返回當(dāng)前選中的元素的index。

getMinSelectionIndex()
返回選中的多個元素中index的最小值,如果選擇為空在返回-1。

getMaxSelectionIndex()
原理同上。

isSelectedIndex(int index)
判斷指定index是否被選中。

clearSelection()
清除選中。

getSelectedIndex()
返回被選中的所有元素中最小的index。

getSelectedIndices()
返回一個整型數(shù)組,包含被選中的所有index。

getSelectedValue()
返回被選中的,index最小的元素值。

getSelectedValues()
返回一個object數(shù)組,包含被選中的所有元素對象。

getSelectedValuesList()
返回一個objectList,包含被選中的所有元素對象。

下面的demo來自于ListSelectionDemo.java

/*
 * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *  - Redistributions of source code must retain the above copyright
 *   notice, this list of conditions and the following disclaimer.
 *
 *  - Redistributions in binary form must reproduce the above copyright
 *   notice, this list of conditions and the following disclaimer in the
 *   documentation and/or other materials provided with the distribution.
 *
 *  - Neither the name of Oracle or the names of its
 *   contributors may be used to endorse or promote products derived
 *   from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */ 
package awtDemo;
/*
 * ListSelectionDemo.java requires no other files.
 */
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
@SuppressWarnings("serial")
public class ListSelectionDemo extends JPanel {
  JTextArea output;
  @SuppressWarnings("rawtypes")
 JList list; 
  JTable table;
  String newline = "\n";
  ListSelectionModel listSelectionModel;
  @SuppressWarnings({ "unchecked", "rawtypes" })
 public ListSelectionDemo() {
    super(new BorderLayout());
    String[] listData = { "one", "two", "three", "four",
               "five", "six", "seven" };
    @SuppressWarnings("unused")
 String[] columnNames = { "French", "Spanish", "Italian" };
    list = new JList(listData);
    listSelectionModel = list.getSelectionModel();
    listSelectionModel.addListSelectionListener(
        new SharedListSelectionHandler());
    JScrollPane listPane = new JScrollPane(list);
    JPanel controlPane = new JPanel();
    String[] modes = { "SINGLE_SELECTION",
              "SINGLE_INTERVAL_SELECTION",
              "MULTIPLE_INTERVAL_SELECTION" };
    final JComboBox comboBox = new JComboBox(modes);
    comboBox.setSelectedIndex(2);
    comboBox.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        String newMode = (String)comboBox.getSelectedItem();
        if (newMode.equals("SINGLE_SELECTION")) {
          listSelectionModel.setSelectionMode(
            ListSelectionModel.SINGLE_SELECTION);
        } else if (newMode.equals("SINGLE_INTERVAL_SELECTION")) {
          listSelectionModel.setSelectionMode(
            ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        } else {
          listSelectionModel.setSelectionMode(
            ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
        }
        output.append("----------"
               + "Mode: " + newMode
               + "----------" + newline);
      }
    });
    controlPane.add(new JLabel("Selection mode:"));
    controlPane.add(comboBox);
    //Build output area.
    output = new JTextArea(1, 10);
    output.setEditable(false);
    JScrollPane outputPane = new JScrollPane(output,
             ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
             ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    //Do the layout.
    JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
    add(splitPane, BorderLayout.CENTER);
    JPanel topHalf = new JPanel();
    topHalf.setLayout(new BoxLayout(topHalf, BoxLayout.LINE_AXIS));
    JPanel listContainer = new JPanel(new GridLayout(1,1));
    listContainer.setBorder(BorderFactory.createTitledBorder(
                        "List"));
    listContainer.add(listPane);
  topHalf.setBorder(BorderFactory.createEmptyBorder(5,5,0,5));
    topHalf.add(listContainer);
    //topHalf.add(tableContainer);
    topHalf.setMinimumSize(new Dimension(100, 50));
    topHalf.setPreferredSize(new Dimension(100, 110));
    splitPane.add(topHalf);
    JPanel bottomHalf = new JPanel(new BorderLayout());
    bottomHalf.add(controlPane, BorderLayout.PAGE_START);
    bottomHalf.add(outputPane, BorderLayout.CENTER);
    //XXX: next line needed if bottomHalf is a scroll pane:
    //bottomHalf.setMinimumSize(new Dimension(400, 50));
    bottomHalf.setPreferredSize(new Dimension(450, 135));
    splitPane.add(bottomHalf);
  }
  /**
   * Create the GUI and show it. For thread safety,
   * this method should be invoked from the
   * event-dispatching thread.
   */
  private static void createAndShowGUI() {
    //Create and set up the window.
    JFrame frame = new JFrame("ListSelectionDemo - www.dbjr.com.cn");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //Create and set up the content pane.
    ListSelectionDemo demo = new ListSelectionDemo();
    demo.setOpaque(true);
    frame.setContentPane(demo);
    //Display the window.
    frame.pack();
    frame.setVisible(true);
  }
  public static void main(String[] args) {
    //Schedule a job for the event-dispatching thread:
    //creating and showing this application's GUI.
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        createAndShowGUI();
      }
    });
  }
  class SharedListSelectionHandler implements ListSelectionListener {
    public void valueChanged(ListSelectionEvent e) { 
      ListSelectionModel lsm = (ListSelectionModel)e.getSource();
      //System.out.printf("LeadSelectionIndex is %s%n",lsm.getLeadSelectionIndex());
      output.append("LeadSelectionIndex is " + lsm.getLeadSelectionIndex() + "\n");
      int firstIndex = e.getFirstIndex();
      int lastIndex = e.getLastIndex();
      boolean isAdjusting = e.getValueIsAdjusting(); 
      output.append("Event for indexes "
             + firstIndex + " - " + lastIndex
             + "; isAdjusting is " + isAdjusting
             + "; selected indexes:");
      if (lsm.isSelectionEmpty()) {
        output.append(" <none>");
      } else {
        // Find out which indexes are selected.
        int minIndex = lsm.getMinSelectionIndex();
        int maxIndex = lsm.getMaxSelectionIndex();
        for (int i = minIndex; i <= maxIndex; i++) {
          if (lsm.isSelectedIndex(i)) {
            output.append(" " + i);
          }
        }
      }
      output.append(newline);
      output.setCaretPosition(output.getDocument().getLength());
    }
  }
}

運(yùn)行效果:

更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java字符與字符串操作技巧總結(jié)》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計有所幫助。

相關(guān)文章

  • JDBC連接MySQL數(shù)據(jù)庫批量插入數(shù)據(jù)過程詳解

    JDBC連接MySQL數(shù)據(jù)庫批量插入數(shù)據(jù)過程詳解

    這篇文章主要介紹了JDBC連接MySQL數(shù)據(jù)庫批量插入數(shù)據(jù)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Java的GUI編程之列表和組合框的設(shè)計使用

    Java的GUI編程之列表和組合框的設(shè)計使用

    這篇文章主要介紹了Java的GUI編程之列表和組合框的設(shè)計使用,是Java圖形界面編程中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-10-10
  • Spring之Scope注解使用詳解

    Spring之Scope注解使用詳解

    spring的bean管理中,每個bean都有對應(yīng)的scope。在BeanDefinition中就已經(jīng)指定scope,默認(rèn)的RootBeanDefinition的scope是prototype類型,使用@ComponentScan掃描出的BeanDefinition會指定是singleton,最常使用的也是singleton
    2023-02-02
  • JavaWeb監(jiān)聽器Listener實(shí)例解析

    JavaWeb監(jiān)聽器Listener實(shí)例解析

    這篇文章主要為大家詳細(xì)介紹了JavaWeb監(jiān)聽器Listener實(shí)例,針對監(jiān)聽器進(jìn)行進(jìn)行細(xì)致分析,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Java日志軟件Log4j的基本使用教程

    Java日志軟件Log4j的基本使用教程

    這篇文章主要介紹了Java日志軟件Log4j的基本使用教程,包括回滾和發(fā)送日志郵件等基本功能使用的講解,需要的朋友可以參考下
    2015-12-12
  • 詳解mybatis批量插入10萬條數(shù)據(jù)的優(yōu)化過程

    詳解mybatis批量插入10萬條數(shù)據(jù)的優(yōu)化過程

    這篇文章主要介紹了詳解mybatis批量插入10萬條數(shù)據(jù)的優(yōu)化過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java中Stream的flatMap與map使用場景及區(qū)別詳解

    Java中Stream的flatMap與map使用場景及區(qū)別詳解

    這篇文章主要介紹了Java中Stream的flatMap與map使用場景及區(qū)別詳解,Stream 流式操作,一般用于操作集合即 List 一類的數(shù)據(jù)結(jié)構(gòu),簡單來說 Stream 的 map 使得其中的元素轉(zhuǎn)為另一種元素的映射(map)方法,需要的朋友可以參考下
    2024-01-01
  • 高斯混合模型與EM算法圖文詳解

    高斯混合模型與EM算法圖文詳解

    高斯模型就是用高斯概率密度函數(shù)(正態(tài)分布曲線)精確地量化事物,將一個事物分解為若干的基于高斯概率密度函數(shù)(正態(tài)分布曲線)形成的模型
    2021-08-08
  • SpringCloud+Redis實(shí)現(xiàn)Api接口限流防止惡意刷接口

    SpringCloud+Redis實(shí)現(xiàn)Api接口限流防止惡意刷接口

    接口限流是為了保護(hù)系統(tǒng)和服務(wù),防止因?yàn)檫^多的請求而崩潰,本文主要介紹了SpringCloud+Redis實(shí)現(xiàn)Api接口限流防止惡意刷接口,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • 詳解Java線程池如何統(tǒng)計線程空閑時間

    詳解Java線程池如何統(tǒng)計線程空閑時間

    這篇文章主要和大家分享一個面試題:Java線程池是怎么統(tǒng)計線程空閑時間?文中的示例代碼講解詳細(xì),對我們掌握J(rèn)ava有一定幫助,需要的可以參考一下
    2022-11-11

最新評論