java_swing实现滚动类面板+面板字体变颜色

swing 实现带滚动类的组件四步

1.有一个空白的面板JPanel

2.添加一个滚动面板JScrollPane

3.面板与组件联系起来setViewportView(component)

4.在面板上添加滚动面板。

 

下面分别就这四步给出代码。

为了方便程序中调用封装一个显示滚动文字的panel.

public class PrintColorPanel extends JPanel {

    /**
     * O
     */
    private static final long serialVersionUID = 786968642266699123L;
    public  JTextPane textPane;
    public  JScrollPane scrollPane;
    /**
     * Create the panel. 
     */
    
    public PrintColorPanel(int width,int height) {
        setLayout(null);
        //设置面板大小
        setSize(new Dimension(width,height));
        
        scrollPane = new JScrollPane();
        scrollPane.setBounds(5, 5, width-10, height-10); //设置滚动面板大小
        
        textPane = new JTextPane();

        textPane.setEditable(false);
        
//将滚动面板与textPane联系起来 scrollPane.setViewportView(textPane); //添加到默认的panel上 add(scrollPane); } }

新建panel进行测试调用。

import java.awt.BorderLayout;

public class TestMain extends JFrame {

    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    TestMain frame = new TestMain();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public TestMain() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 337);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        
        //添加滚动面板
        PrintColorPanel pcp = new PrintColorPanel(400,280);
        getContentPane().add(pcp);
        
        
        
    }

}

运行图示:

 

 到此为止只是将滚动的面板显示了出来。因为里面没有文字所以没有出现滚动的效果。因为后期我们要在面板中显示文字所以重新封装下滚动面板。

 

import java.awt.Color;

public class PrintColorPanel extends JPanel {

    /**
     * O
     */
    private static final long serialVersionUID = 786968642266699123L;
    public  JTextPane textPane;
    public  JScrollPane scrollPane;
    /**
     * Create the panel.
     */
    
    public PrintColorPanel(int width,int height) {
        setLayout(null);
        
        setSize(new Dimension(width,height));
        
        scrollPane = new JScrollPane();
        scrollPane.setBounds(5, 5, width-10, height-10);
        
        textPane = new JTextPane();
        Style def = textPane.getStyledDocument().addStyle(null, null);
        StyleConstants.setFontFamily(def, "verdana");
        StyleConstants.setFontSize(def, 12);
        
        Style normal = textPane.addStyle("normal", def);
        Style s = textPane.addStyle("red", normal);
        Style s1 = textPane.addStyle("green", normal);
        
        StyleConstants.setForeground(s, Color.RED);
        StyleConstants.setForeground(s1, new Color(0,205,0));
        textPane.setParagraphAttributes(normal, true);
        textPane.setEditable(false);
        
        scrollPane.setViewportView(textPane);
         
         
        add(scrollPane);

    }
 
    /**
     * 追加字和颜色
     */
    public void appendSting(String str){
        try {
            textPane.getDocument().insertString(textPane.getDocument().getLength(), str,  textPane.getStyle("normal"));
            textPane.setCaretPosition(textPane.getDocument().getLength());
        } catch (BadLocationException e) {
             
            e.printStackTrace();
        }
    }
    /**
     * 追加字和颜色
     */
    public void appendSting(String str,String color){
        try {
            
            textPane.getDocument().insertString(textPane.getDocument().getLength(), str,  textPane.getStyle(color));
            textPane.setCaretPosition(textPane.getDocument().getLength());
        } catch (BadLocationException e) {
             
            e.printStackTrace();
        }
    }
    
    public void setTextPaneNull(){
        textPane.setText("");
    }
}

 

 再次进行测试:

import java.awt.BorderLayout;

public class TestMain extends JFrame {

    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    TestMain frame = new TestMain();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public TestMain() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 337);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        
        //添加滚动面板
        PrintColorPanel pcp = new PrintColorPanel(400,280);
        getContentPane().add(pcp);
        
        for(int i=0;i<1000;i++){
            if(i%2==0){
                pcp.appendSting(i+"是偶数\n", "red");
            }else{
                pcp.appendSting(i+"是奇数\n", "green");
            }
        }
        
    }

}

 

 

posted @ 2019-02-28 14:44  吃米不就菜  阅读(3274)  评论(0编辑  收藏  举报