通过Java在ScrollPane中绘制一个巨大的面板

use*_*422 4 java swing jpanel jscrollpane paintcomponent

我的问题是我想绘制一个巨大的面板,但它不可能在一个小尺寸的框架中看到这个面板,所以我应该使用ScrollPane,我用它..

但是通过滚动冲突发生,所以我看不到任何面板.我只想修复它

请任何人看到我的代码并运行它并帮助解决问题

import java.awt.*;
import javax.swing.*;

public class Swing{
    JFrame frame;
    Panel panel;
    public static void main(String [] args){
        Swing a  = new Swing();
        a.go();
    }
    public void go(){
        frame  = new JFrame();
        panel = new Panel();
        panel.setPreferredSize(new Dimension(5000, 5000));
        JScrollPane scroll = new JScrollPane(panel);
        frame.add(scroll);
        frame.pack();
        frame.setVisible(true);
    }

    class Panel extends JPanel{
        public void paintComponent(Graphics g){
            Graphics2D a = (Graphics2D)g;
            a.setColor(Color.RED);
            a.drawLine(50, 50, 5000, 5000);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢!

And*_*son 6

始终确保调用super.paintComponent(g);重绘组件的其余部分.否则会看到这些类型的绘画文物.

import java.awt.*;
import javax.swing.*;

public class Swing{
    JFrame frame;
    Panel panel;
    public static void main(String [] args){
        Swing a  = new Swing();
        a.go();
    }
    public void go(){
        frame  = new JFrame();
        panel = new Panel();
        panel.setPreferredSize(new Dimension(5000, 5000));
        JScrollPane scroll = new JScrollPane(panel);
        frame.add(scroll);
        frame.pack();
        frame.setVisible(true);
    }

    class Panel extends JPanel{
        public void paintComponent(Graphics g){
            super.paintComponent(g);  // VERY IMPORTANT!
            Graphics2D a = (Graphics2D)g;
            a.setColor(Color.RED);
            a.drawLine(50, 50, 5000, 5000);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)