繁体   English   中英

Java Swing中JFrame上的滚动条

[英]Scroll bar on JFrame in Java Swing

因此,我有一个大小为500x500的JFrame,使用g.drawLine(x,y)在(0,200)到(100000,200)之间绘制一条线。 问题是我看不到整行,因为没有滚动条。 有人可以告诉我在这种特殊情况下如何使用滚动条来查看整条线直到点(100000,200)。

尽管我有可用性方面的问题 ,但下面的示例说明了如何实现Scrollable接口,如如何使用滚动窗格:实现精通滚动的客户端中所述 特别注意, getPreferredScrollableViewportSize()的结果与getPreferredSize()的结果有何不同。 单位和块的增量也使分页更加容易。

图片

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Rectangle;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.Scrollable;
import javax.swing.SwingConstants;

/**
 * @see https://stackoverflow.com/a/37460185/230513
 */
public class Test {

    private void display() {
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new JScrollPane(new DrawingPanel()));
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    private static class DrawingPanel extends JPanel implements Scrollable {

        private static final int W = 100_000;
        private static final int H = 400;

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(W, H);
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setColor(Color.red);
            g.drawLine(0, getHeight() / 2, getWidth(), getHeight() / 2);
            g.drawLine(0, getHeight() / 4, 0, 3 * getHeight() / 4);
            g.drawLine(W - 1, getHeight() / 4, W - 1, 3 * getHeight() / 4);
        }

        @Override
        public Dimension getPreferredScrollableViewportSize() {
            return new Dimension(640, H);
        }

        @Override
        public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
            if (orientation == SwingConstants.HORIZONTAL) {
                return W / 10;
            } else {
                return 10;
            }
        }

        @Override
        public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
            if (orientation == SwingConstants.HORIZONTAL) {
                return W / 10;
            } else {
                return 10;
            }
        }

        @Override
        public boolean getScrollableTracksViewportWidth() {
            return false;
        }

        @Override
        public boolean getScrollableTracksViewportHeight() {
            return false;
        }
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Test()::display);
    }
}

您能告诉我们代码吗? 既然很难不知道就知道,但是在我的头上,我想您应该创建一个并将其添加到您的JFrame中,如下所示:

 JTextArea ta = new JTextArea(); // Example with a JTextArea,
         depends on what you have, as I said, we need to see the code

 JScrollPane sp = new JScrollPane(ta); //Add it to the component 
    needed, in your case the drawn line i guess

 jFrame.add(sp); //Add it to the frame

在添加Ande之前,您可以控制尺寸:

sp.setColumnHeaderView(new JLabel("header column"));

sp.setRowHeaderView(new JLabel("header row"));

sp.setPreferredSize(new Dimension(500, 300));

暂无
暂无

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

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