【问题标题】:Scrollable JPanel based on it's paintComponent基于它的paintComponent的可滚动JPanel
【发布时间】:2014-08-07 21:07:00
【问题描述】:

我正在使用java-2d 来可视化我的应用程序。我创建了扩展JPanel 的面板来绘制一个简单的矩形。我已将其命名为 MyPanel

因此,面板的宽度和高度会根据矩形定义动态变化。我使用JScrollPane 为我的面板添加滚动功能,如下所示:

JScrollPane scrollPane = new JScrollPane(panel);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

我使用下面的代码将我的面板添加到窗口:

JFrame frame = new JFrame();
frame.setLayout(new GridLayout(1,1));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setResizable(false);

MyPanel panel = new MyPanel();

JScrollPane scrollPane = new JScrollPane(panel);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

frame.add(scrollPane);
frame.setVisible(true);

现在,在 MyPanel 的 paintComponents 中,我想绘制宽度和高度大于容器(框架)宽度和高度的矩形。但是卷轴不起作用。

怎么了? 谁能帮帮我?

提前致谢:)

【问题讨论】:

    标签: java swing jpanel jscrollpane paintcomponent


    【解决方案1】:

    滚动窗格使用组件的首选大小来确定它应该有多大,并在组件大小大于滚动窗格的大小时提供滚动...

    尝试覆盖自定义组件的getPreferredSize方法,返回你想要的大小

    如果MyPanel 的大小在程序运行时发生变化,请使用对Dimension 的引用(由getPreferredSize 返回)并在更改时调用revalidate

    【讨论】:

    • 谢谢 :) 我应该使用paintComponent 中的这个尺寸来绘制矩形,对吧?!
    • 是的,在您的paintComponent 中,您应该使用getWidth 和getHeight,记住,preferredSize 是一个提示,但JScrollPane 通常会遵守它...
    • 我无法理解“preferredSize 是一个提示”,你能解释一下吗?
    • 布局管理器可以使用 getPreferred/Minimum/MaximumSize 的组合来确定组件的大小,这就是布局管理器的工作方式,但他们可以忽略这些值并让它们自己决定,因此,在您的代码中,您不应该总是依赖于您想要的或认为组件的大小应该是什么,但有时,这就是重点。作为一般经验法则。我依赖于组件的实际大小,但有时我不能,因为我画的东西必须是特定的大小,比如你的情况;)
    猜你喜欢
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 2011-07-23
    • 2014-05-12
    • 2012-04-16
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    相关资源
    最近更新 更多