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

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

提前致谢!

最佳答案

始终确保调用 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);
        }
    }
}

关于java - 通过 Java 在 ScrollPane 中绘制一个巨大的面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20852536/

相关文章:

java - 了解堆上静态和非静态方法表示之间的区别

java - Cardlayout 不会在 InternalFrame 上的卡片内显示面板

java - 当焦点离开我的 JTable 时,结合 'Excel-like' 行为并更新模型

Java - 将多个用户输入添加到 arraylist

java - 来自 Google API 的存储凭据可使用 Java 重复使用

java - 无法转换为 DEX 格式

Java Swing : How to distinguish events triggered by user?

java - 为什么按钮/标签/文本未在我的背景上显示/居中?

java - 如何更改另一个类的私有(private)变量 JTextField 或为其赋值?

java - 在 java jframe 中结束行并继续