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就不成立了。
添加回答
举报
0/150
提交
取消