为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕少森 2019-02-19 03:50:32
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还要大,为什么没出现滚动条?
查看完整描述

1 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

把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就不成立了。

查看完整回答
反对 回复 2019-03-01
  • 1 回答
  • 0 关注
  • 1039 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信