繁体   English   中英

Java Swing滚动浏览图形

[英]Java Swing Scroll through drawing

我正在尝试向我的JPanel添加JScrollpane。 问题在于,滚动窗格无法识别我的图形在框架之外。 那么如何正确添加JScrollpane?

主班:

public MainFrame() extends JFrame{

public MainFrame() {

        Container container = getContentPane(); 
        container(new BorderLayout());
        container.add(new JScrollPane(new Drawing()));

        setSize(1280,720);
        setVisible(true);
    }

绘画课:

public class Drawing() extends JPanel {

    @Override
    protected void paintComponent(Graphics g) {
       g.drawLine(10, 100, 30000, 10);
    }
}

您的代码中有几个错误,让我们逐一介绍这些错误:

  1. 您正在扩展JFrame ,应该避免使用它,请参阅: 扩展JFrame与在程序内部创建它有关更多信息。 您实际上并没有改变其行为,因此不需要扩展它。

  2. 为了让JScrollPane显示整行,您需要将窗口的大小更改为与行的大小相同(如@MadProgrammer的此答案所示)。

  3. 与第2点相关,请避免使用setSize(...) ,而是改写getPreferredSize() :请参阅是否应该避免在Java Swing中使用set(Preferred | Maximum | Minimum)Size方法? 欲获得更多信息

  4. 您忘记在paintComponent()方法中调用super.paintComponent(...) paintComponent()方法。

  5. 与第2点,第3点相关,您需要调用pack()以便Swing计算组件的最佳首选大小。

请参阅以下示例:

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;

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

public class LongDraw {
    private JFrame frame;
    private Drawing drawing;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new LongDraw()::createAndShowGui);
    }

    private void createAndShowGui() {
        frame = new JFrame(getClass().getSimpleName());

        drawing = new Drawing();

        JScrollPane scroll = new JScrollPane(drawing);

        frame.add(scroll);

        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    class Drawing extends JPanel {
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);

            Graphics2D g2d = (Graphics2D) g;
            g2d.drawLine(10, 100, 3000, 10);
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(3000, 500);
        }
    }
}

产生类似于以下内容的内容:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM