我想在JPanel上绘制字符串和矩形。
我正在将JPanel添加到JScrollPane,但是如果绘制一些String,则不会出现滚动条。
这是一些示例代码。

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);
            }

        }
    }
}

最佳答案

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

10-01 07:45