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

标签 java swing jlist scrollpane

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

我想为我的 JList 创建一个水平和垂直的 JScrollPane。其实是可以的,但是还是有问题。

我总是需要向右滚动才能看到垂直滚动 Pane : my ScrollPanes my ScrollPanes

我的代码:

   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);

例如,

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);
         }
      });
   }
}

关于java - 如何显示 JList 的水平和垂直滚动条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33186688/

相关文章:

java - 如何从外部类追加 JTextArea?

java - 让主方法等待较小的方法(java)

java Swing监听器: components listening at each others

java - 如何获取JList中面板的选定元素(覆盖选定元素)

java - 独立模式下的错误:权限被拒绝

java - JSP 不返回带有下拉菜单的结果

java - 关于小于和负值?

java - JAXB 转换在 Mule 中不起作用

java - Swing - 在 JAR 文件中包含图像

Java Swing - 制作两个 JLists "siblings"- 即只能选择其中一个项目