[英]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.