Java 如何显示JList的水平和垂直滚动条?

Java 如何显示JList的水平和垂直滚动条?,java,swing,jlist,scrollpane,Java,Swing,Jlist,Scrollpane,今天我在玩JList的,然后我发现了一个问题。 我知道我的领域没有好名声,但正如我所说的,我只是随便玩玩 我想为我的JList创建一个水平和垂直的JScrollPane。事实上,这是可行的,但仍然存在一个问题 我总是要向右滚动才能看到垂直滚动窗格: 我的代码: final JList list = new JList(GUI.strings.toArray()); JScrollPane scrollPane = new JScrollPane(list); JScroll

今天我在玩JList的,然后我发现了一个问题。 我知道我的领域没有好名声,但正如我所说的,我只是随便玩玩

我想为我的JList创建一个水平和垂直的JScrollPane。事实上,这是可行的,但仍然存在一个问题

我总是要向右滚动才能看到垂直滚动窗格:

我的代码:

   final JList list = new JList(GUI.strings.toArray());

   JScrollPane scrollPane = new JScrollPane(list);
   JScrollPane scrollPanex = new JScrollPane(scrollPane);

   scrollPanex.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
   scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

   getContentPane().add(scrollPanex, BorderLayout.CENTER);

有什么方法可以解决这个问题,使我始终可以看到两个滚动条吗?

只需使用一个JScrollPane,然后设置单个JScrollPane的两个滚动条策略

final JList list = new JList(GUI.strings.toArray());
JScrollPane scrollPane = new JScrollPane(list);

scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

getContentPane().add(scrollPane, BorderLayout.CENTER);
e、 g

导入java.awt.Dimension;
导入java.util.Random;
导入javax.swing.DefaultListModel;
导入javax.swing.JList;
导入javax.swing.JOptionPane;
导入javax.swing.JScrollPane;
导入javax.swing.JViewport;
导入javax.swing.SwingUtilities;
公共类ScrollPaneFun{
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
Random rand=新的Random();
DefaultListModel lModel=新的DefaultListModel();
JList myList=新JList(lModel);
myList.setVisibleRowCount(20);
对于(int i=0;i<50;i++){
StringBuilder sb=新的StringBuilder();
sb.append(String.valueOf(i)+“:”);
对于(int j=0;j<50;j++){
对于(int k=0;k<3;k++){
字符c=(字符)('a'+rand.nextInt('z'-'a'+1));
sb.附加(c);
}
某人附加(“”);
}
l模型加法(sb.toString());
}
JScrollPane scrollPane=新的JScrollPane(myList);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HorizontalScrollBar\uAlways);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL\u SCROLLBAR\u ALWAYS);
JViewport viewport=scrollPane.getViewport();
int w=400;
int h=viewport.getPreferredSize().height;
尺寸首选尺寸=新尺寸(w,h);
viewport.setPreferredSize(preferredSize);
showMessageDialog(空,滚动窗格);
}
});
}
}
import java.awt.Dimension;
import java.util.Random;

import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JViewport;
import javax.swing.SwingUtilities;

public class ScrollPaneFun {
   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            Random rand = new Random();
            DefaultListModel<String> lModel = new DefaultListModel<>();
            JList<String> myList = new JList<>(lModel);
            myList.setVisibleRowCount(20);

            for (int i = 0; i < 50; i++) {
               StringBuilder sb = new StringBuilder();
               sb.append(String.valueOf(i) + ": ");
               for (int j = 0; j < 50; j++) {
                  for (int k = 0; k < 3; k++) {
                     char c = (char) ('a' + rand.nextInt('z' - 'a' + 1));
                     sb.append(c);
                  }
                  sb.append(' ');
               }
               lModel.addElement(sb.toString());
            }

            JScrollPane scrollPane = new JScrollPane(myList);
            scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
            scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            JViewport viewport = scrollPane.getViewport();
            int w = 400;
            int h = viewport.getPreferredSize().height;
            Dimension preferredSize = new Dimension(w, h);
            viewport.setPreferredSize(preferredSize);
            JOptionPane.showMessageDialog(null, scrollPane);
         }
      });
   }
}