【Java】解析JScrollPane類的使用


在這篇博文中,筆者介紹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);
    }
}

然后就可以看到滾動條了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM