当前位置: 首页 > 知识库问答 >
问题:

JScrollPane和JPanel

王英奕
2023-03-14

所以,我正在制作一种文本编辑器,我需要一个用于垂直导航的JScrollPane。但我不能让它工作。

我已经阅读了谷歌搜索结果前十页上的每一篇奇怪的教程,但我无法让它发挥作用。

假设我有JFrame(尺寸1000x800)。我想在其中放置一个JPanel(1000x2000),以便它与JFrame水平对齐。我想在JPanel的右侧粘贴一个简单的滚动条,这样就可以访问它的其余部分。

我减少了大小,我将JPanel添加到JScrollBar,反之亦然,将其中一个添加到JFrame,两者都没有,但什么都没有。

所以,在这一点上,我不介意几行完成的代码。。。

编辑:好吧,这是代码...

mWindow = new JFrame(lang.getString("title"));
mWindow.setSize(1000, 800);
mWindow.setLocationRelativeTo(null);
mWindow.setResizable(false);
mWindow.setLayout(null);
mWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

mWindow.setVisible(true);

workspace = new JPanel();
workspace.setBounds(0,0, 1000, 1203);
workspace.setBackground(Color.RED);

scroll = new JScrollPane(workspace, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scroll.setBounds(0, 20, 600, 600);
//scroll.setLayout(null);
mWindow.getContentPane().add(scroll);
mWindow.repaint();
mWindow.validate();

它显示JPanel的一部分(600X600,(JScrollPane大小)),并显示滚动条,但不可滚动

共有3个答案

包子航
2023-03-14

我会做:

>

  • 边框布局,因此滚动窗格适合Frane内容窗格的所有房间;
  • 最后的一个包,用于布局;
  • set可视最后;
  • setPreferredsize如果没有帮助。

    mWindow = new JFrame(lang.getString("title"));
    mWindow.setSize(1000, 800);
    mWindow.setLocationRelativeTo(null);
    mWindow.setResizable(false);
    mWindow.setLayout(new BorderLayout());
    mWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    workspace = new JPanel();
    workspace.setBounds(0,0, 1000, 1203);
    workspace.setPreferredSize(new Dimension(1000,1203));
    
    workspace.setBackground(Color.RED);
    
    scroll = new JScrollPane(workspace, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    scroll.setBounds(0, 20, 600, 600);
    mWindow.getContentPane().add(scroll, BorderLayout.CENTER);
    mWindow.pack();
    mWindow.setVisible(true);
    

  • 宋英杰
    2023-03-14

    通过应用尝试

    setPreferredSize(new Dimension());
    

    方法,而不是setSize()方法。

    像这样:

    import java.awt.Dimension;
    
    import javax.swing.*;
    public class Example extends JFrame{
    
    public static void main(String[] args) {
        Example ex = new Example();
        JPanel panel = new JPanel();
        JScrollPane sc = new JScrollPane(panel);
        panel.setPreferredSize(new Dimension(800,600));
        ex.getContentPane().add(sc);
        ex.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ex.pack();
        ex.setVisible(true);
    }
    
    }
    
    林丁雷
    2023-03-14

    所以,我做了这个非常快速的测试,它对我很有效...

    public class TestPane extends JPanel {
    
        public TestPane() {
    
            setBorder(new LineBorder(Color.RED));
            // This is for demonstration purposes only
            // One should always rely on the layout manager
            // to define this value
            // Thank kleopatra 
            setPreferredSize(new Dimension(1000, 1000));
    
        }
    
        @Override
        protected void paintComponent(Graphics g) {
    
            super.paintComponent(g);
    
            FontMetrics fm = g.getFontMetrics();
    
            Dimension size = getPreferredSize();
            String text = "Pref: " + size.width + "x" + size.height;
            g.drawString(text, 0, fm.getAscent());
    
            size = getSize();
            text = "Size: " + size.width + "x" + size.height;
            g.drawString(text, 0, fm.getHeight() + fm.getAscent());
    
        }
    
    }
    

    和测试框架

    public class TestFrame {
    
        public static void main(String args[]) {
    
            JFrame frame = new JFrame();
            frame.setLayout(new BorderLayout());
    
            JScrollPane scroll = new JScrollPane(new TestPane());
    
            frame.add(scroll);
    
            frame.setSize(500, 500);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
    
        }
    
    }
    

    由此产生:

    另一方面,我不知道为什么人们坚持使用空布局,它们只会带来更多的麻烦和心痛,超出了它们的价值。花点时间找一些简单的布局管理器。我讨厌VB有很多原因,但布局管理是我的首选,IMHO

     类似资料:
    • 问题内容: 我有一个,其内容窗格为。为此,我添加了较小的,并且如预期的那样,如果添加太多,则会出现一个垂直滚动条。 问题是,我的小s包含一个过了。我想使用鼠标滚轮 仅 用于滚动面板外,而不是较小的滚动窗格。我已经设定到为小滚动面板,但如果我朝任意方向滚动,以及鼠标越过,滚动不工作了。 有什么建议吗? 问题答案: 您可以尝试将滚轮事件从内部滚动窗格转发到其父级。

    • jScrollPane这个jQuery插件可以让你通过简单的CSS设置就能够替换所有分块元素在浏览器中默认的垂直滚动条样式。

    • 问题内容: 我有下一个代码: 自动向下滚动。但是,如果我尝试向上滚动以重新阅读消息,则会强制向下滚动。我怎样才能解决这个问题? 问题答案: 添加新邮件时,使用尺寸与邮件窗格的首选大小相同的进行调用。给定垂直取向,它可方便地使的优选尺寸的邮件面板的高度的整数倍。另请参阅: 如何使用滚动窗格 。 附录:有关 文本区域滚动的 引人入胜的讨论也可能会有所帮助。

    • 主要内容:1 Java JScrollPane的介绍,2 Java JScrollPane的构造方法,3 Java JScrollPane的方法,4 Java JScrollPane的案例1 Java JScrollPane的介绍 JscrollPane用于制作组件的可滚动视图。当屏幕大小受到限制时,我们使用滚动窗格来显示大型组件或大小可以动态更改的组件。 2 Java JScrollPane的构造方法 构造方法 描述 JScrollPane() 创建一个滚动窗格。Component参数(如果存

    • 我有一个JFrame,它在JScrollPane中包含一个JSplitPane(因此,如果窗口很大,用户可以滚动)。JSplitPane包含作为顶部组件的JTabbedPane,以及作为底部组件的graphics。现在我想读一个。csv并在我的jtabbedpane中显示它。我可以使用第二个JScrollPane在列表中滚动。问题来了,当我在我的程序中导入。csv时,第一个JScrollPane似

    • 问题内容: 我有一个JFrame,在这个JFrame中,我有一个绘制的JPanel,此Panel可以是任何大小,因此我将其放在JScrollpane中,以便当面板大于窗口屏幕大小时可以滚动。 不幸的是,它没有按我预期的那样工作: 使JFrame窗口小于JPanel大小不会显示滚动条 现在,JScrollPane的大小似乎已锁定为我添加到其中的JPanel的大小,就像以前一样,它的大小已调整为JFr