Metal LAF JScrollPane渲染bug?

时间:2011-02-07 21:57:23

标签: java swing

在使用JScrollPane类几天之后,我遇到了一个关于水平JScrollBar组件的非常奇怪的渲染问题。在默认摆动“金属”外观中使用这些组件时,水平滚动条的中心抓手图案似乎在特定内容/视口尺寸下呈现不正确。

下面的代码打开了一个带有嵌入式JScrollPane组件的简单JFrame窗口,该窗口似乎表现出奇怪的渲染行为,因为水平滚动条被拖向最右边的外部性。由于水平滚动条抓取器的渲染似乎取决于内容/视口的大小,因此此代码将打开显式尺寸为1402x800的父JFrame。不同尺寸似乎具有相同的效果,包括1440x900分辨率下的最大化窗口,并且在非合成桌面环境(即运行基本/经典主题的Windows XP或Vista / 7)中问题更容易出现。

public class Main
{
 public static void main(String[] args)
 {
  ScrollbarTest application = new ScrollbarTest();
  application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
}

public class ScrollbarTest extends JFrame
{

 public ScrollbarTest()
 {
  super("Scrollbar Test");
  Container container = getContentPane();

  JScrollPane scrollPane =
    new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                    JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

  JPanel contentPanel = new JPanel();
  contentPanel.setPreferredSize(new Dimension(8000, 8000));

  scrollPane.getViewport().add(contentPanel);
  container.add(scrollPane);

  setSize(1402,800);
  setVisible(true);
 }
}

由于我被禁止直接将图像上传到此论坛,因此我放置了一张图像here,描述了我目前遇到的异常情况。如您所见,当我将水平滚动条拖向其右端时,中心抓取器功能无法正确渲染。请注意,这似乎不会发生在所有窗口大小,但1402x800的初始JFrame维度肯定会在我的系统上发挥作用。说实话,直到我从1280x800屏幕移动到1440x900屏幕后,这个问题才显现出来。

感谢收到有关此异常的可重复性和/或原因的任何评论。

最好的问候,李。

1 个答案:

答案 0 :(得分:0)

感谢大家花时间阅读这篇文章。由于我们不是专业程序员,我们必须寻求建议,以确保我们正确使用Java API。 我们让Sun的人们看看我们的问题,这看起来似乎是摆动“金属”外观的错误。请参阅下面的相关信函。

  

亲爱的Java开发人员,

     

感谢您报告此问题。

     

我们已确定此报告是   一个新的bug并将bug输入我们的   Bug下的内部bug跟踪系统   Id:7017935。

     

您可以在Java上监控此错误   Bug数据库在   http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7017935

     

可能需要一两天才能完成   bug出现在这个外部   数据库。如果您是该会员   Sun开发者网络(SDN),有   一旦出现错误,还有两个选项   可见。

     
      
  1. 投票指出错误点击http://bugs.sun.com/bugdatabase/addVote.do?bug_id=7017935

  2.   
  3. 将报告添加到您的Bug监视列表中。您将收到一封电子邮件   更新此错误时的通知。   点击   “http://bugs.sun.com/bugdatabase/addBugWatch.do?bug_id=7017935”。

  4.         

    Sun Developer Network   (http://developers.sun.com)是免费的   Sun提供的服务。加入,   访问   “https://softwarereg.sun.com/registration/developer/en_US/new_user”。

         

    问候,Java开发人员支持

最好的问候,李。