首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java ScrollPane/JPanel

Java ScrollPane/JPanel
EN

Stack Overflow用户
提问于 2011-11-12 04:49:44
回答 2查看 4.5K关注 0票数 1

我有一个包含多个Object(自定义类扩展Jpanel)对象的JPanel。JPanel有一个7行1列的网格布局。我试图将一个包含7个对象的JPanel添加到另一个JScrollPane中,这样我就可以滚动查看所有的对象,但它做了一些奇怪的事情。无论JPanel中有多少对象,滚动条都不会显示。有什么想法吗?提前谢谢。

代码语言:javascript
复制
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.GridLayout;

    import javax.swing.BorderFactory;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollBar;
    import javax.swing.JScrollPane;
    import javax.swing.ScrollPaneLayout;    

    public class Main {
    @SuppressWarnings("deprecation")
    public static void main(String[] args) {
          JFrame frame = new JFrame("Test");
          frame.setLayout(new BorderLayout());

          JLabel title = new JLabel("Game", JLabel.CENTER);
          title.setPreferredSize(new Dimension(60,60));
          title.setBorder(BorderFactory.createLineBorder(Color.black,5));
          frame.add(title,BorderLayout.NORTH);

          frame.setSize(850,480);
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

          Grid g = new Grid(); 

          JPanel jp = new JPanel();
          jp.setLayout(new GridLayout(1,3));
          jp.add(g);

          JPanel test = new JPanel();         


          test.setLayout(new GridLayout(7,1));

          test.add(p1);
          test.add(p2);
          test.add(p3);
          test.add(p4);
          test.add(p5);
          test.add(p6);
          test.add(p7);
          JScrollPane jsp = new JScrollPane(test);
          jsp.setViewportView(test);
          jsp.getVerticalScrollBar().setUnitIncrement(50);
          jsp.setCorn
          jsp.setVerticalScrollBarPolicy(22);               

          jp.add(jsp,BorderLayout.EAST);    

          frame.add(jp);
          frame.setLocationRelativeTo(null);
          frame.setVisible(true);
          }      
      }
EN

回答 2

Stack Overflow用户

发布于 2011-11-12 05:02:30

jp JPanel使用JPanel的默认FlowLayout,这可能会阻止您调整JScrollPane的大小并查看它是否工作正常。为什么不将JScrollPane添加到JFrame的contentPane中,或者让jp使用BorderLayout?此外,您也不需要设置JScrollPane的测试,因为您已经通过将“viewportView”传递给它的构造函数来执行此操作。

票数 2
EN

Stack Overflow用户

发布于 2011-11-12 08:12:56

你的代码不能编译。请看下面的代码。它可以垂直和水平滚动。

代码语言:javascript
复制
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;

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

class MyPanel extends JPanel {
    MyPanel(Color c) {
        setBackground(c);
    }
}

public class Test {
    public static void main(String[] args) {
        JPanel panel = new JPanel();
        // the size of this panel is larger than the frame
        panel.setPreferredSize(new Dimension(500, 2000));
        panel.setLayout(new GridLayout(7, 1));
        // add 7 sub panels
        panel.add(new MyPanel(Color.magenta));
        panel.add(new MyPanel(Color.cyan));
        panel.add(new MyPanel(Color.blue));
        panel.add(new MyPanel(Color.green));
        panel.add(new MyPanel(Color.yellow));
        panel.add(new MyPanel(Color.orange));
        panel.add(new MyPanel(Color.red));

        JScrollPane scroll = new JScrollPane(panel);
        scroll.setViewportView(panel);
        scroll.getVerticalScrollBar().setUnitIncrement(50);

        JFrame frame = new JFrame("Test");
        frame.setSize(400, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(scroll);
        frame.setVisible(true);
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8099789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档