【问题标题】:How to make JPanel scrollable in Java?如何使 JPanel 在 Java 中可滚动?
【发布时间】:2017-01-03 11:59:07
【问题描述】:

我有一个扩展JPanel 的类,我在其中重写了paintComponent(Graphics g) 方法。但是,我看不到我绘制的矩形或滚动条。

在主函数中,我有以下代码:

    MyClass mainPanel = new MyClass();
    mainPanel.setPreferredSize(new Dimension(1000, 1000));
    mainPanel.setLayout(new BorderLayout());

    JPanel scrollPanel = new JPanel();
    scrollPanel.setSize(new Dimension(2000, 2000));       
    JScrollPane scrollPane = new JScrollPane(scrollPanel,  JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);  //Let all scrollPanel has scroll bars
    scrollPane.setViewportView(scrollPanel);
    scrollPane.setOpaque(true);

    scrollPanel.revalidate();
    mainPanel.add(scrollPane);


    JFrame frame = new JFrame("Scrollable Panel");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(mainPanel);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);  

【问题讨论】:

  • 请阅读official guide
  • 试试scrollPanel.setPreferredSize(new Dimension(2000, 2000));。目前您的scrollPanel 正在缩小到零,因此scrollPane 不需要显示任何滚动条。
  • @NimrodArgov,阅读他的代码,他有一个。
  • 当我改变 scrollPanel.setSize(new Dimension(2000, 2000));使用 scrollPanel.setPreferredSize(new Dimension(2000, 2000));滚动条出现,但我通过图形对象绘制的矩形没有出现。
  • 官方指南显示了将滚动条附加到 textArea 或图像的示例,它没有提到使 JPanel 可滚动。

标签: java jpanel scrollable


【解决方案1】:

我已经解决了这个问题。 MyClass 扩展了 JPanel。而且我已经覆盖了 paintComponent(Graphics g) 方法,在该方法中我通过 Graphics 绘制矩形。

MyClass mainPanel = new MyClass()
mainPanel.setPreferredSize(new Dimension(7000, 1000));
mainPanel.setLayout(new BorderLayout());

JScrollPane scrollPane = new JScrollPane(mainPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);  //Let all scrollPanel has scroll bars
scrollPane.setPreferredSize(new Dimension(1000, 900));


JFrame frame = new JFrame("Scrollable JPanel");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(scrollPane);
frame.setSize(1000, 900);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 2021-06-21
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多