Я хотел бы удалить стрелочные кнопки прокрутки из полосы прокрутки в JScrollPane. Как мне это сделать?Удалить стрелки из Swing Scrollbar в JScrollPane
ответ
Если вы используете базовую версию JScrollBar, то это, вероятно, рендеринг с использованием BasicScrollBarUI. Я бы предложил вам расширить BasicScrollBarUI для создания пользовательского интерфейса (например, MyBasicScrollBarUI). Кнопки являются защищенными переменными в суперклассе. Поэтому вам необходимо переопределить методы installComponents() в подклассе и не добавлять кнопки. См. Приведенный ниже фрагмент кода и спрячьте строки, как это предлагается там.
protected void installComponents(){
switch (scrollbar.getOrientation()) {
case JScrollBar.VERTICAL:
incrButton = createIncreaseButton(SOUTH);
decrButton = createDecreaseButton(NORTH);
break;
case JScrollBar.HORIZONTAL:
if (scrollbar.getComponentOrientation().isLeftToRight()) {
incrButton = createIncreaseButton(EAST);
decrButton = createDecreaseButton(WEST);
} else {
incrButton = createIncreaseButton(WEST);
decrButton = createDecreaseButton(EAST);
}
break;
}
scrollbar.add(incrButton); // Comment out this line to hide arrow
scrollbar.add(decrButton); // Comment out this line to hide arrow
// Force the children's enabled state to be updated.
scrollbar.setEnabled(scrollbar.isEnabled());
}
Затем в коде после инициализации JScrollBar, вы можете вызвать setUI() и передать экземпляр класса MyBasicScrollBarUI.
Примечание: Я не использовал это сам, но из кода он выглядит так, как будто он может работать.
class NoArrowScrollBarUI extends BasicScrollBarUI {
protected JButton createZeroButton() {
JButton button = new JButton("zero button");
Dimension zeroDim = new Dimension(0,0);
button.setPreferredSize(zeroDim);
button.setMinimumSize(zeroDim);
button.setMaximumSize(zeroDim);
return button;
}
@Override
protected JButton createDecreaseButton(int orientation) {
return createZeroButton();
}
@Override
protected JButton createIncreaseButton(int orientation) {
return createZeroButton();
}
@Override
protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) {
//own painting if needed
}
@Override
protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) {
//own painting if needed
}
}
Удаление кнопки позволяют пространство для затем. Я нашел кнопки с кнопками нуль как самый простой способ.
Это прекрасно работает !!! –
Это не самый элегантный способ ... но работает для меня
JScrollBar jsb = getHorizontalScrollBar();
for(Component c : jsb.getComponents()) {
jsb.remove(c);
}
Вы должны, вероятно, не продлить «Basic» UI. Если вы это сделаете, вы потеряете все настройки LAF. Таким образом, вы, вероятно, должны распространять MetalScrollBarUI, или какой-либо пользовательский интерфейс используется для вашего LAF. – camickr
@camickr: соглашайтесь с этим. Расширение базового интерфейса - это просто самый простой способ проиллюстрировать возможное решение. – Thimmayya
@Thimmayya Я пробовал код, и пока значки со стрелками исчезли, кнопки все еще там. Я только что редактировал свой вопрос, чтобы указать удаление кнопки. Спасибо за эту идею. – asawilliams