Я использую JscrollPane, чтобы добавить элементы, а когда у меня больше 7, JScrollBar внутри моей JScrollPane активирован. Мне нужно, что когда я ввожу новый элемент, полоса прокрутки перемещается вправоПереместить JScrollPane прокрутите вправо SWING
public void addElement(String nombre, Wheel wheel)
{
if(actual != null)
{
actual.bordeOn(false);
}
if(this.actual != null && this.index != 0 && this.index != this.actual.getIndex()+1)
{//Se ha producido navegacion en medio de la pila
for(int i = this.stack.size()-1 ; i > this.actual.getIndex(); i--)
{//Borramos todos los elementos del actual en adelante.
BreadCrump b = this.stack.get(i);
this.panelBCD.remove(b);
this.stack.remove(i);
}
this.index = this.actual.getIndex()+1;
}
BreadCrump bc = new BreadCrump(nombre, this);
bc.setIndex(this.index);
this.index++;
this.stack.add(bc);
panelBCD.add(bc);
actual = bc;
bc.setWheel(wheel);
bc.bordeOn(true);
numberElements++;
JScrollBar scroll = sp.getHorizontalScrollBar();
scroll.setValue(scroll.getMaximum());
this.revalidate();
this.repaint();
}
КОНСТРУКТОР:
public Displayer(JPanel father)
panelBCD = new JPanel();
this.setBackground(new java.awt.Color(200, 200, 200));
this.setPreferredSize(new java.awt.Dimension(father.getSize().width, height));
BoxLayout aaa = new BoxLayout(this,1);
this.setLayout(aaa);
FlowLayout mg = new FlowLayout(0,80,0); //Este es la separacion entre elementos
//a.setLayout(null);
panelBCD.setLayout(mg);
mg.setAlignment(FlowLayout.LEFT);
sp = new JScrollPane(panelBCD);
sp.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
sp.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
//sp.setBounds(0, 0,father.getSize().width, height);
this.add(sp);
father.add(this, java.awt.BorderLayout.PAGE_END);
addMouseListener(this);
addMouseMotionListener(this);
sp.setViewportBorder(new LineBorder(Color.BLACK));
полоса прокрутки перемещается вправо, но никогда не достигают максимума, всегда немного больше расстояния до прокрутки.
Кто-нибудь знает, почему это происходит? Я видел, что использование setValue и getMaximum перемещает полосу прокрутки вправо, но для меня она остается рядом справа, но не справа.
Спасибо за ваше время.
Вот скриншот, чтобы увидеть его.
EDIT: Класс, который содержит этот код является JPanel
EDIT2: Проблема заключается в том, что, когда я двигаться вправо, свиток не обновляется, поэтому Maximun когда я SetValue, не является окончательный максим.
Этот JPanel находится внутри другого JPanel, который имеет компоновку с другими компонентами.
Итак: в этом JPanel у меня есть JScrollBarPane с JPanel, у которого есть компоненты, которые я добавляю во время выполнения. Этот JPanel находится внутри другого JPanel. Когда я обновляю позицию полосы прокрутки, то максимальная позиция не равна конечной максимальной позиции этой итерации.
JScrollPane doenst влияет на размер окна
Я надеюсь, что это достаточно информации.
я вижу проблему, но я Не знаю, как это исправить. Проблема в том, что когда я выполняю scroll.setValue(), полоса прокрутки не обновляется. Если в моем основном коде я заставляю его двигаться вправо, он работает, но в моем Панельном коде не работает.Я редактирую сообщение для получения дополнительной информации – Transy
@Transy См. Мое редактирование. Вам нужно будет отрегулировать порядок вашего кода и изменить то, что вы повторно проверяете. – sorifiend