簡體   English   中英

JList停止選擇最后一個項目

[英]JList stop selecting last item

我在選擇JList時遇到問題。 當我單擊JList中的任何對象時,它將被選中(很好)。

但是,當我單擊所有對象的下方(在空白處)時,將選擇JList中的最后一項。 如何關閉它? 在所有對象(在空白區域)下面單擊之后,我不想在JList中選擇最后一個對象。

經過幾句評論后,我將在此處添加代碼示例。

import java.awt.Color;
import java.awt.Dimension;

import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;

public class TestOfJList extends JFrame{

private static JList playList;
private static DefaultListModel<String> modelPlayList;  
private static JPanel mainPanel;
private static MyCellRenderer myRendererForJlist;

private static void createAndShowGUI() {

    JFrame.setDefaultLookAndFeelDecorated(true);
    try {       
        for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    }catch (Exception e){
      e.printStackTrace();
    }

    JFrame frame = new JFrame("JListTest!");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(700, 250, 300, 400);       
    frame.setResizable(false);    

    mainPanel = new JPanel();

    modelPlayList = new DefaultListModel<String>();

    modelPlayList.addElement("Hello world!");
    modelPlayList.addElement("Hello heaven!");
    modelPlayList.addElement("Hello hell!");


    playList = new JList(modelPlayList);

    playList.setPreferredSize(new Dimension(270,500));
    playList.setVisible(true);
    playList.setBackground(Color.LIGHT_GRAY);       
    playList.setSelectionBackground(Color.YELLOW);      
    playList.setSelectedIndex(0);
    playList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    playList.setDragEnabled(true);      
    playList.setDropMode(javax.swing.DropMode.ON_OR_INSERT);
    playList.setFixedCellHeight(20);        

    JScrollPane scrollPane = new JScrollPane(playList);
    scrollPane.setPreferredSize(new Dimension(300,400));

    mainPanel.add(scrollPane);

    myRendererForJlist = new MyCellRenderer();      
    playList.setCellRenderer(myRendererForJlist);

    frame.add(mainPanel);       
    frame.setVisible(true);     
}

public static void main(String[] args) {

    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }
    });
}
}

MCVE 2:

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

public class TestList {
   public static final String[] ITEMS = { "One", "Two", "Three", "Four", "Five" };

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            JList<String> myList = new JList<>(ITEMS);
            myList.setVisibleRowCount(10);
            JScrollPane sPane = new JScrollPane(myList);

            // just to see what listeners are involved
            MouseListener[] mouseListeners = myList.getListeners(MouseListener.class);
            System.out.println(mouseListeners.length);

            MouseMotionListener[] mouseMotionListeners = myList.getListeners(MouseMotionListener.class);
            System.out.println(mouseMotionListeners.length);


            JOptionPane.showMessageDialog(null, sPane);
         }
      });
   }
}

您需要更改滾動面板的首選大小,因為它會擴展整個主面板,並且當您單擊最后一個元素(在空白區域)下方時,它會被選中

變更:-

scrollPane.setPreferredSize(new Dimension(300,400));

scrollPane.setPreferredSize(new Dimension(300,100));

現在單擊下面的列表將不會更改選擇。

如下所示 在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM