Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JList停止选择最后一项_Java_Swing_Select_Jlist - Fatal编程技术网

Java JList停止选择最后一项

Java JList停止选择最后一项,java,swing,select,jlist,Java,Swing,Select,Jlist,我在选择列表时遇到问题。当我单击JList中的任何对象时,都会选择该对象 但当我在空白处的所有对象下方单击时,将选择JList中的最后一项。 我怎样才能关掉它?我不想在单击空白区域中所有对象的下方后选择JList中的最后一个对象 在几句评论之后,我在这里添加了代码示例 import java.awt.Color; import java.awt.Dimension; import javax.swing.DefaultListModel; import javax.swing.JFrame;

我在选择列表时遇到问题。当我单击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的首选大小,因为它会在整个主面板上展开,当您在空白处单击最后一个元素时,它会被选中

更改:-

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

现在单击下面的列表将不会更改选择

它将如下所示
请分享一些代码,说明如何构造这个列表以获得更好的帮助,考虑创建和发布一个。我们不希望看到您的整个程序,但您应该将代码压缩到最小的位,该位仍然可以编译,没有与您的问题无关的额外代码,但仍然可以演示您的问题。已添加代码。我认为它现在可以打开了。我看到的一个问题是您设置的尺寸和/或首选的尺寸使您的JList比它应该的大。您不应该在JList上设置大小或首选大小。这仍然不能解决我的问题。当我注释这些行时,它仍然会在单击所有对象下方后选择最后一个对象。尺码/首选尺码与此无关。我照你说的做了,但仍然不起作用。单击JList中所有对象下方后,将选择最后一个元素。您需要设置首选大小,以便用户无法在scrollpane的emtpy区域中单击。查看ScrollPane标记灰色和panellightscrollPane的颜色差异。设置PreferredSizeNew Dimension300,70;这不是正确的解决方案,因为我不知道JList中有多少对象。如果我使用您的解决方案,我仍然必须检查JList中有多少对象,并且牢记这一点,我必须更改JList的大小。那有很多工作要做。必须有另一个更好的解决方案,像这样。这就是jscrollpane将要出现的地方。添加10-11个元素并检查
scrollPane.setPreferredSize(new Dimension(300,100));