Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.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 滚动条不出现在JScrollPane中_Java_Swing_Jscrollpane - Fatal编程技术网

Java 滚动条不出现在JScrollPane中

Java 滚动条不出现在JScrollPane中,java,swing,jscrollpane,Java,Swing,Jscrollpane,我想做一个窗口,有两个高度很高的按钮和一个侧边的滚动条。问题是没有出现滚动条。这是我的密码 public class Window { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //namestanje teme try { UIManager.setLookAndFeel("com.sun.jav

我想做一个窗口,有两个高度很高的按钮和一个侧边的滚动条。问题是没有出现滚动条。这是我的密码

public class Window {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub

    //namestanje teme
    try {
        UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InstantiationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (UnsupportedLookAndFeelException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    JFrame frame = new JFrame("frame");
//  frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
    frame.setSize(500,500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel panel = new JPanel(null);

    JButton but1 = new JButton();
    JButton but2 = new JButton();

    panel.add(but1);
    panel.add(but2);

    but1.setSize(50, 505);
    but2.setSize(50, 505);

    but1.setLocation(0, 0);
    but2.setLocation(400, 400);

    but1.setText("1");
    but2.setText("2");


    JScrollPane scroll = new JScrollPane(panel);

    frame.add(scroll);
    frame.setVisible(true);         
}
}

注意:一开始,按钮的宽度很大(通过使用类似“11111111111111111”的名称来命名),并且会出现一个滚动条。然后我想要大的高度,必须在面板上放零。现在没有滚动条出现。

当添加到scollpane的组件的首选大小大于滚动窗格的大小时,滚动条出现

布局管理器的工作是确定配电盘的首选尺寸。布局管理器还负责确定添加到配电盘的构件的大小和位置

摆脱空布局,使用布局管理器,需要时会自动显示滚动条

如果希望零部件的显示方式不同于垂直视图,则需要使用不同的布局管理器。也许您可以使用垂直布局的。您可以使用:

panel.add( Box.createVerticalStrut(400) );

要在两个组件之间添加垂直空间。

要始终显示滚动条,请使用:

yourScrollBar.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);


为什么使用空布局?另外,您应该调用
setPreferredSize(…)
,而不是
setSize(…)
。你在这里的目标是什么?16行设置Nimbus PLAF对于演示问题真的是必要的吗?在这个问题上,请考虑将来张贴。它可能会出现,但它不会起作用。不应使用setSize()和setLocation()。
import javax.swing.*;
import java.awt.*;
public class Window {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        //namestanje teme
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (UnsupportedLookAndFeelException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        JFrame frame = new JFrame("frame");
    //  frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frame.setPreferredSize(new Dimension(100,95));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();

        JButton but1 = new JButton();
        JButton but2 = new JButton();

        panel.add(but1);
        panel.add(but2);

        but1.setSize(50, 505);
        but2.setSize(50, 505);

        but1.setLocation(0, 0);
        but2.setLocation(400, 400);

        but1.setText("1");
        but2.setText("2");


        JScrollPane scroll = new JScrollPane(panel);
        scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

        frame.setLayout(new FlowLayout());
        frame.pack();
        frame.add(scroll);
        frame.setVisible(true);         
    }

}