【问题标题】:Scrollable JPanel可滚动的 JPanel
【发布时间】:2010-11-26 00:34:27
【问题描述】:

如何使 JPanel 可滚动?使用

将其添加到包含面板时,我实现了可滚动界面
tabbedPane.add("Editor", new JScrollPane(storeyEditor = new MNScrollablePanel()));

没有用

代码:

public class MNScrollablePanel extends JPanel implements Scrollable {

    public Dimension getPreferredScrollableViewportSize() {
        return getPreferredSize();
    }

    public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
        return 10;
    }

    public boolean getScrollableTracksViewportHeight() {
        return false;
    }

    public boolean getScrollableTracksViewportWidth() {
        return false;
    }

    public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
        return 10;
    }
}

【问题讨论】:

    标签: java swing scroll jpanel


    【解决方案1】:

    JPanel 没有实现 Scrollable。最好使用来自SwingX 的JXPanel,它实现了Scrollable 并且有更多的功能。

    【讨论】:

      【解决方案2】:

      它像这样和我一起工作......

      JPanel test = new JPanel();
      test.setPreferredSize(new Dimension( 2000,2000));
      JScrollPane scrollFrame = new JScrollPane(test);
      test.setAutoscrolls(true);
      scrollFrame.setPreferredSize(new Dimension( 800,300));
      this.add(scrollFrame);
      

      【讨论】:

      • 请注意,您无法控制滚动增量,即每次单击滚动按钮或每次转动鼠标滚轮都会滚动一个像素,如果您愿意的话,您需要通过实现Scrollable
      【解决方案3】:

      我有一个新的解决方案给你。

      我认为您必须使用此代码:

      storyEditor = new JPanel();
      storyEditor.setPreferredSize(new Dimension(..., ...)); // Insert Here your size for the editor
      JScrollPane scroller = new JScrollPane(storyEditor);
      tabbedPane.add("Editor", scroller));
      frame.setSize(frame.getWidth()+1, frame.getHeight()); // frame is the JFrame where the tabbed pane is into
      // Maybe you can replace "frame" with "this"
      // You need to resize your frame. Why, I don't know...
      frame.pack();
      // Your original size will be restored by calling pack
      

      这对我来说是一个解决方案。我希望你能!

      【讨论】:

        【解决方案4】:

        正如所有其他帖子中提到的,没有理由自己实现 Scrollable 接口。但是,如果您只是在玩,那么发布的基本代码看起来很合理。但是,您没有发布演示程序来展示您如何使用此代码。将来,请在 SSCCE 上发布您的问题。如果您不知道什么是 SSCCE,请搜索网络。

        一个可能的问题是,当添加到滚动窗格视口的组件的“首选大小”大于滚动窗格的大小时,滚动条会自动出现。

        因此,如果您在面板上进行自定义绘画,您有责任在面板更改时设置首选尺寸。如果您正在使用带有组件和布局管理器的面板,那么您不必担心这一点。但是,如果您使用带有 null 布局管理器的组件,您也会遇到问题。

        这就是我们需要 SSCCE 的原因,因为我们不知道您如何使用面板的上下文。

        【讨论】:

          【解决方案5】:

          您必须使用JScrollPane。然后拨打setViewportview(Component);

          你不必实现可滚动,JPanel 已经可以滚动了

          【讨论】:

          • 您可以将任何组件添加到 JScrollPane,无论它是否实现了 Scrollable,但实现 Scrollable 会给您更多的控制权。 JPanel 没有实现 Scrollable,因此如果您想在显示面板时更好地控制滚动窗格的行为,则必须对其进行子类化。
          • (或者您可以在JScrollPane/JScrollBars 上设置属性而不执行任何操作。)
          • @Dan:是的,但我从未说过“实现”
          • @MartijnCourteaux 你没说过,但这太误导人了。
          • @MartijnCourteaux 说JPanel is allready scrollable,隐含地表示它实现了 Scrollable 接口,这是不正确的。
          猜你喜欢
          • 1970-01-01
          • 2014-05-12
          • 2012-04-16
          • 2017-10-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多