java - 在 JPanel 上绘画并将其添加到 JScrollPane

标签 java swing jpanel jscrollpane

正如标题所示,我想在 JPanel 上绘画并将其显示在 JScrollpane 中,这样如果 JPanel 中的内容很大,就会显示滚动条。我试图通过以下方式实现这一目标:

import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class Main extends JFrame{

DrawPanel dp;
JScrollPane jsp;

public Main(){
    setTitle("Test");
    setSize(400,400);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    dp = new DrawPanel();
    jsp = new JScrollPane(dp);
    getContentPane().add(jsp);
}

public class DrawPanel extends JPanel{

    @Override
    protected void paintComponent(Graphics grphcs) {
        super.paintComponent(grphcs);
        Graphics2D g2d = (Graphics2D) grphcs;
        g2d.drawString("..long text....long text....long text....long text....long text....long text....long text....long text..", 10, 20);
    }

}

public static void main(String[] args) {
    new Main().setVisible(true);
}

}

Current Output

预期输出:带有长文本和水平滚动条的窗口。

我也尝试过重写 getPreferredSize 方法(正如其他问题中的一些答案所建议的那样),但它似乎不起作用。 另外,有人可以解释为什么当面板中有标签或按钮添加到 jscrollpane 时会出现滚动条(使用 jscrollpane),但在上面的情况下同样不起作用?任何帮助将不胜感激。

最佳答案

您可以通过设置大小或覆盖它们来调整 JPanel 的大小。

    Dimension d = new Dimension(800, 800);
    dp.setMinimumSize(d);
    dp.setMaximumSize(d);
    dp.setPreferredSize(d); 

当我这样做时会出现滚动条。

关于java - 在 JPanel 上绘画并将其添加到 JScrollPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39343224/

相关文章:

java - JButton 多个命令

java - 从封闭的成员类访问阴影字段 (Java)

java - 拥有仅使用 Java 内存的自定义文件实现的最简单方法是什么

java - 将多个 graphic2d 组件绘制到 JPanel 中

java - 我如何让我的程序从一个输入字段计算两个方程式?

java - JTable、JTextArea 或 JEditorPane 来突出显示代码行?

java - 无法将不同的鼠标事件监听器添加到不同的面板

Java调度导致错误

java - 如何在 Java 中将数组字符右移?

java - 当调用新的 JPanel 时,单击 JButton 时随机生成数字