Java JScrollPane不是';t显示

Java JScrollPane不是';t显示,java,swing,jscrollpane,jlist,Java,Swing,Jscrollpane,Jlist,编辑:按照你们说的更新了我的代码。仍然不起作用:( 这基本上就是我这个列表的全部代码。当我运行这个程序时,你可以看到列表。但是你只能看到前5个数字,不能滚动或类似的东西。我知道,显示前5个数字是有意的 那么,没有滚动条我做错了什么 顺便说一句,我在谷歌上搜索了很多年,所以不要给出这样一个令人兴奋的答案 谢谢你的阅读和帮助^ ^试试这个 String test[] = {"1", "2", "3", "4", "5", "6", "7", "75" }; list = new JList(

编辑:按照你们说的更新了我的代码。仍然不起作用:(

这基本上就是我这个列表的全部代码。当我运行这个程序时,你可以看到列表。但是你只能看到前5个数字,不能滚动或类似的东西。我知道,显示前5个数字是有意的

那么,没有滚动条我做错了什么

顺便说一句,我在谷歌上搜索了很多年,所以不要给出这样一个令人兴奋的答案

谢谢你的阅读和帮助^ ^

试试这个

String test[] = {"1", "2", "3", "4", "5", "6", "7", "75" };
    list = new JList(test);
    list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    list.setLayoutOrientation(JList.VERTICAL);
    list.setVisibleRowCount(5);
    list.setLocation(50,159);
    list.setSize(50, 100);

    JScrollPane jScrollPane1= new JScrollPane();
    jScrollPane1.setViewportView(list);

    add(jScrollPane1);
注意您应该始终提供一名布局经理

那么你就不必“硬编码”了

另外一个好的做法是使用顶级容器添加到框架中,例如,您可以使用JPanel

JScrollPane jScrollPane1= new JScrollPane()
jScrollPane1.setViewportView(jList1);
setLayout(new BorderLayout());
add(jScrollPane1);// add to the frame
pack();// Size the frame.

我试着将其作为一个测试应用程序(完全按照nachokk的建议进行),我得到了一个功能完美的滚动面板

setLayout(new BorderLayout());
JPanel panel = new JPanel();
panel.setLayout(new VerticalLayout()); // this layout is in swingx package
JScrollPane jScrollPane1= new JScrollPane()
jScrollPane1.setViewportView(jList1);
setLayout(new BorderLayout());
panel.add(jScrollPane1);// add to the frame
add(panel);
pack();// Size the frame.

如果没有进一步的证据,您似乎正在放弃使用布局管理器(或使用错误的布局管理器)

布局管理器为您的应用程序提供了重要的支持,并克服了大多数UI开发人员几乎所有语言都面临的最烦人和最耗时的问题;简单地将它们扔掉是一个非常糟糕的主意,不应该轻率地完成


很容易认为你可以不使用它们;但是当你的用户界面变得复杂,你想支持可调整大小的窗口时(在处理滚动窗格时,你应该这样做),布局管理器会挽救你的生命。

为什么要添加列表两次?最初是在滚动窗格中,然后再作为普通列表添加?尝试删除此
add(list)
当我删除这个部分(添加(列表);)时,它就完全消失了。你看不到滚动条和列表。后者是“添加”实际上是将列表添加到容器中,我认为您在另一部分中有一些不好的地方,我认为..我将该代码放在ide中并对我有效:D..可能您不应该直接将scrollPane添加到框架中,而是将scrollPane添加到面板,然后将面板添加到框架中,这样您就有了一个框架,您可以在需要时更改面板;)建议删除布局管理器是错误的,只会导致更多的问题。布局管理器提供了一项重要的工作,并且解决了一些非常常见和重要的问题,立即丢弃它们只是一个坏主意,即使OP开始这么做。我还应该补充的是,包装会将框架的大小调整为顶级组件的组合首选大小,而您现在忽略了这一点,这就是为什么我会说,“放置您想要的布局”,然后您使用了setBounds。您应该已经演示了如何使用适当(且简单)的布局管理器。因为op已经在处理setLocation和setSize,所以不太具体是不明智的
setLayout(new BorderLayout());
JPanel panel = new JPanel();
panel.setLayout(new VerticalLayout()); // this layout is in swingx package
JScrollPane jScrollPane1= new JScrollPane()
jScrollPane1.setViewportView(jList1);
setLayout(new BorderLayout());
panel.add(jScrollPane1);// add to the frame
add(panel);
pack();// Size the frame.
package seronis.testing;

import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;

@SuppressWarnings("serial")
public class FrameTest extends JFrame {

    public FrameTest(String string) {
        super(string);
        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(800,600));

        String test[] = {"alpha", "bravo", "charlie", "delta", "echo", "omega", "zeta" };
        JList list = new JList(test);
        list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        list.setLayoutOrientation(JList.VERTICAL);
        list.setVisibleRowCount(5);
        list.setBounds(50, 150, 75, 90);

        JScrollPane jScrollPane1= new JScrollPane();
        jScrollPane1.setViewportView(list);

        panel.add(jScrollPane1);

        this.add(panel);
        this.pack();
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setResizable(false);
        this.setFocusable(true);
        this.setLocationRelativeTo(null);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new FrameTest("Quick Test");
                frame.setVisible(true);
            }
        });
    }

}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout()); // This is the default layout, but I added it as an example

String test[] = {"1", "2", "3", "4", "5", "6", "7", "75" };
list = new JList(test);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setLayoutOrientation(JList.VERTICAL);
list.setVisibleRowCount(5);

JScrollPane jScrollPane1= new JScrollPane()
jScrollPane1.setViewportView(jList1);
add(jScrollPane1);// add to the contentPane
frame.pack();// Size the frame.