自定义绘画 - Scrollbars不出现在JScrollPane中

时间:2013-06-04 11:14:43

标签: java swing jpanel scrollbar jscrollpane

我想在JPanel上绘制字符串和矩形。

我正在向JScrollPane添加JPanel但是如果我绘制了一些字符串,则不会出现滚动条。

以下是一些代码。

package gui;

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class MainView extends JFrame {

    private SelfDrawnPanel sdp;
    private JScrollPane jsp;

    public MainView(){
        super("TestProgram");
        this.setSize(300, 300);

        this.setDefaultCloseOperation(EXIT_ON_CLOSE);

        this.sdp = new SelfDrawnPanel();
        this.jsp = new JScrollPane(this.sdp);

        this.add(this.jsp);

        this.setVisible(true);
    }

    class SelfDrawnPanel extends JPanel {

        public void paint(Graphics g) {

            for (int i = 0; i < 100; i++) {
                g.setColor(Color.BLACK);
                g.drawString("test", 10, (i*10)+10);
            }

        }
    }
}

1 个答案:

答案 0 :(得分:2)

ViewportView组件的首选大小大于JScrollPane的大小时,会显示滚动条。目前,JPanel SelfDrawnPanel的首选大小非常小(10 x 10)。通过覆盖getPreferredSize来设置首选大小:

@Override
public Dimension getPreferredSize() {
    return new Dimension(400, 1010);
}

除此之外:Swing中的自定义绘画是通过覆盖paintComponent而不是paint来完成的。另请记住调用super.paintComponent(g)并使用@Override注释。了解自定义绘画here