2009-11-23 3 views

ответ

2

Если вы используете базовую версию 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.

Примечание: Я не использовал это сам, но из кода он выглядит так, как будто он может работать.

+0

Вы должны, вероятно, не продлить «Basic» UI. Если вы это сделаете, вы потеряете все настройки LAF. Таким образом, вы, вероятно, должны распространять MetalScrollBarUI, или какой-либо пользовательский интерфейс используется для вашего LAF. – camickr

+0

@camickr: соглашайтесь с этим. Расширение базового интерфейса - это просто самый простой способ проиллюстрировать возможное решение. – Thimmayya

+0

@Thimmayya Я пробовал код, и пока значки со стрелками исчезли, кнопки все еще там. Я только что редактировал свой вопрос, чтобы указать удаление кнопки. Спасибо за эту идею. – asawilliams

2
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 
} 

}

Удаление кнопки позволяют пространство для затем. Я нашел кнопки с кнопками нуль как самый простой способ.

+0

Это прекрасно работает !!! –

0

Это не самый элегантный способ ... но работает для меня

JScrollBar jsb = getHorizontalScrollBar(); 
     for(Component c : jsb.getComponents()) { 
      jsb.remove(c); 
     } 

 Смежные вопросы

  • Нет связанных вопросов^_^