在這篇博文中,筆者介紹JScrollPane類的使用,JScrollPane類可以為組件添加滾動條。在這里筆者不會詳細介紹該類的方法有哪些,因為在API上已經寫得一清二楚了。在這篇博文中,筆者重點介紹JScrollPane依據屬性來添加滾動條的。
看下面這個案例:
JFrame frame=new JFrame("ScrollPanel測試"); JPanel panel=new JPanel();
System.out.println(panel.getPreferredSize().toString()); for(int i=0;i<6;i++){ panel.add(new JButton("按鈕"+i));
System.out.println(panel.getPreferredSize().toString()); } frame.add(new JScrollPane(panel)); frame.setPreferredSize(new Dimension(400,400));//寬400,高400 frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true);
6個按鈕的寬度超過了400,結果出現了滾動條。但是我們同時也會發現一個規律,就是preparedSize一直在擴大,直到超過了400才出現滾動條的。
再看接下來的案例:
static JTextArea area=null; public static void main(String[] args) { JFrame frame=new JFrame("ScrollPanel測試"); area=new JTextArea(); area.addKeyListener(new KeyListener() { @Override public void keyTyped(KeyEvent e) { } @Override public void keyReleased(KeyEvent e) { System.out.println(area.getPreferredSize().toString()); } @Override public void keyPressed(KeyEvent e) { } }); frame.add(new JScrollPane(area)); frame.setPreferredSize(new Dimension(400,400));//寬400,高400 frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }
通過這個案例也可以發現,每輸入一個文字,preparedSize就在擴大,直到超過400,才出現滾動條的。
這樣以來就是驗證了JScrollPanel是按照容器的preparedSize來決定是否出現滾動條的。
例如:
public class JScrollPaneTest { public static void main(String[] args) { JFrame frame=new JFrame("ScrollPanel測試"); MyPanel panel=new MyPanel(); frame.add(new JScrollPane(panel)); frame.setPreferredSize(new Dimension(400,400));//寬400,高400 frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } class MyPanel extends JPanel{ @Override public void paint(Graphics g) { super.paint(g); g.drawString("hello", 500, 500);//在500,500處寫入文字 } }
上面的程序為,主窗口的大小設置為高400,寬400。在主窗口中添加了MyPanel的實例,該實例類繼承自JPanel,並且重寫了paint方法,在坐標為(500,500)處寫下文字。運行結果,並非你相信的那樣會出現滾動條,然后我們再把MyPanel實例的preparedSize打印一下,會發現PreparedSize的寬為10,高為10。到現在我們就弄清楚了,原來MyPanel實例的大小比主窗口的大小要小,所以不會出現滾動條。因此這樣修改MyPanel類就可以了:
class MyPanel extends JPanel{ @Override public void paint(Graphics g) { super.paint(g); g.drawString("hello", 500, 500);//在500,500處寫入文字 } @Override public Dimension getPreferredSize() { return new Dimension(600,600); } }
然后就可以看到滾動條了。