java - 为什么JScrollPane没有出现滚动条?

查看:564
本文介绍了java - 为什么JScrollPane没有出现滚动条?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JPanel;

import java.awt.Dimension;
import java.awt.Component;
import java.awt.GridLayout;
class Test{
    JFrame jframe;
    JLabel jlabel1;
    JLabel jlabel2;
    JLabel jlabel3;
    JLabel jlabel4;
    JScrollPane jscrollpane;
    JPanel jpanel;
    
    Dimension size;

    Test(){
        jframe=new JFrame();
        jpanel=new JPanel(new GridLayout(4,1));
        jlabel1=new JLabel("label1");
        jlabel2=new JLabel("label2");
        jlabel3=new JLabel("label3");
        jlabel4=new JLabel("label4");
        jpanel.add(jlabel1);
        jpanel.add(jlabel2);
        jpanel.add(jlabel3);
        jpanel.add(jlabel4);
        jpanel.setPreferredSize(new Dimension(200,200));

        jscrollpane=new JScrollPane(jpanel);
        jscrollpane.setSize(100,100);
        
        jframe.add(jscrollpane);
        jframe.setSize(new Dimension(300,300));
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jframe.setVisible(true);
        jframe.setLayout(null);
        }
    public static void main(String arr[]){
        SwingUtilities.invokeLater(new Runnable(){public void run(){new Test();}});
        }
    }
    

JPanel的size比jscrollpane还要大,为什么没出现滚动条?

解决方案

把setVisible(true)放到最后,genius,不然setLayout(null)是不起作用的,在setLayout(null)(空布局器)的情况下,你可以随意用setSize规定组件的大小,如果有布局管理器的存在,setSize就不会总是起作用了,这时要用setPreferredSize(Dimension)。
回到主题,由于setVisible是在setLayout(null)之前,所以JFrame使用的是默认布局器,当然,如果把null换成FlowLayout或GridLayout之类则会起作用,setVisible在setLayout之前会不起作用只是针对null而言。因为JFrame的布局器是BorderLayout,JScrollPane的setSize无效,并且BorderLayout让JScrollPane的size与JFrame相等,这样JPanel的size大于JScrollPane的size就不成立了。

这篇关于java - 为什么JScrollPane没有出现滚动条?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆