Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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 swing JScrollPane不可滚动_Java_Swing - Fatal编程技术网

Java swing JScrollPane不可滚动

Java swing JScrollPane不可滚动,java,swing,Java,Swing,我试图得到一个满是标签的窗口,并使其可滚动,这是我的代码: public class JobHistoryListScreen extends JFrame implements View { @Override public void showScreen() { setSize(800, 800); setLayout(new BorderLayout()); setDefaultCloseOperation(EXIT

我试图得到一个满是标签的窗口,并使其可滚动,这是我的代码:

public class JobHistoryListScreen extends JFrame implements View
{

    @Override
    public void showScreen()
    {
        setSize(800, 800);
        setLayout(new BorderLayout());
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        JPanel main = new JPanel();
        main.setSize(500,500);
        JScrollPane scroll = new JScrollPane(main,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        scroll.setSize(500,500);

        //Font
        //Font david50 = new Font("David", Font.BOLD, 50);

        for(int i=0; i<1000; i++)
        {
            JLabel empty = new JLabel("No jobs to display!");
            empty.setBounds(0,i+250,400,100);
            empty.setFont(david50);
            main.add(empty);
        }
        add(main);
        setVisible(true);
    }

    public static void main(String[] args) {
        JobHistoryListScreen v = new JobHistoryListScreen();
        v.showScreen();
    }
}
公共类JobHistoryListScreen扩展JFrame实现视图
{
@凌驾
公共屏幕
{
设置大小(800800);
setLayout(新的BorderLayout());
setDefaultCloseOperation(关闭时退出);
JPanel main=新的JPanel();
主设置尺寸(500500);
JScrollPane scroll=newjscrollpane(主、JScrollPane.VERTICAL\u SCROLLBAR\u ALWAYS、JScrollPane.HORIZONTAL\u SCROLLBAR\u NEVER);
滚动。设置大小(500500);
//字体
//Font david50=新字体(“David”,Font.BOLD,50);

对于(int i=0;i了解布局管理器。请参阅。
JPanel
的默认值为
FlowLayout
,并且由于
JPanel
位于
JScrollPanel
内,标签将不会换行。由于您将水平滚动条策略设置为“从不”,因此没有水平滚动条,因此无法水平滚动。尝试使用
BoxLayout
将所有标签一个接一个地显示。或者,您可以使用0(零)行和1(一)列的
GridLayout
。有关详细信息,请参阅本教程

编辑 这是我对你的代码的修改版本。代码后面会出现注释

导入java.awt.Dimension;
导入java.awt.EventQueue;
导入java.awt.Font;
导入java.awt.GridLayout;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.WindowConstants;
公共类JobHistoryListScreen实现可运行{
私有JFrame;
@重写//java.lang.Runnable
公开募捐{
showScreen();
}
公共屏幕{
框架=新的JFrame(“作业”);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JPanel main=新的JPanel(新的网格布局(0,1));
JScrollPane scroll=新的JScrollPane(主,
JScrollPane.VERTICAL\u滚动条\u始终,
JScrollPane.HORIZONTAL\u SCROLLBAR\u NEVER);
scroll.setPreferredSize(新维度(500500));
Font david50=新字体(“David”,Font.BOLD,50);

对于(int i=0;i您没有将滚动窗格添加到框架中。您直接添加了
main
1)
setLayout(null)
Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作。在不同的地区使用不同的PLAF。因此,它们不利于像素完美的布局。相反,使用布局管理器,或者与布局填充和边框一起使用。
null
布局也会使滚动窗格失败。2)为了更快地获得更好的帮助,可以添加一个或…3)main.setSize(800800);
这对于一个800 x 800的框架来说太大了,这个框架也有一个标题栏,并且(在大多数系统上)在左、右和底部有几个像素。4)Swing和AWT GUI应该在EDT上启动并更新。5)字体david50=新字体(“David”,Font.BOLD,50)
在解决布局问题时,不要设置自定义字体。也不要假设它们可用,除非它们随应用程序一起分发。代码会显式加载它们。6)除非确实需要,否则不要扩展框架或组件。该代码中没有任何内容需要自定义框架。@AndrewThompson更改了我的代码,否关于可滚动的问题,事情发生了变化。正如@khelwood所建议的,将
add(main);
更改为
add(scroll);
!Tnx作为注释,我尝试了使用方框和网格布局,nither给了我滚动的选项。水平滚动的“从不”和垂直滚动的“总是”是故意的。