Поработав с классом JScrollPane в течение нескольких дней, я столкнулся с очень странной проблемой рендеринга, связанной с горизонтальным компонентом JScrollBar.При использовании этих компонентов в стандартном размахе «Металл» внешний вид центральной ручки горизонтальной полосы прокрутки отображается неправильно при определенных размерах содержимого / области просмотра.
Приведенный ниже код открывает простое окно JFrameсо встроенным компонентом JScrollPane, который, по-видимому, демонстрирует странное поведение рендеринга , когда горизонтальная полоса прокрутки перетаскивается в крайнее правое положение .Так как рендеринг захвата горизонтальной полосы прокрутки зависит от размера содержимого / области просмотра, этот код открывает родительский JFrame с явным размером 1402x800.Различные размеры, по-видимому, имеют тот же эффект, включая развернутое окно с разрешением 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);
}
}
Поскольку мне запрещено загружать изображения непосредственно на этот форум, я разместил здесь изображение , изображающее аномалию, которую я испытываю в настоящее время.Как вы можете видеть, центральный элемент захвата не отображается правильно, так как я перетаскиваю горизонтальную полосу прокрутки к ее правому краю.Обратите внимание, что этого не происходит при всех размерах окна, но начальное измерение JFrame 1402x800, безусловно, помогает моей системе.Честно говоря, эта проблема не была очевидной, пока я не перешел с экрана 1280x800 на экран 1440x900.
Любые комментарии, касающиеся воспроизводимости и / или причины этой аномалии, будут с благодарностью приняты.
BestС уважением, Ли.