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 回答

慕妹3242003
TA貢獻1824條經驗 獲得超6個贊
把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
提交
取消