Ich verwende JscrollPane, das ich Elemente hinzufüge und wenn ich mehr als 7 habe, ist die JScrollBar in meinem JScrollPane aktiviert. Ich brauche, dass, wenn ich ein neues Element einzuführen, wird die Bildlaufleiste nach rechts bewegtBewege JScrollPane scrolle nach rechts 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();
}
CONSTRUCTOR:
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));
Die Bildlaufleiste nach rechts bewegt wird, aber nie das Maximum erreichen, immer ein wenig mehr Abstand zum Scrollen.
Wer weiß, warum das auftritt? Ich habe gesehen, dass mit setValue und getMaximum die Bildlaufleiste nach rechts bewegt wird, aber für mich bleibt es in der Nähe der rechten, aber nicht der rechten Seite.
Danke für Ihre Zeit.
Hier ist ein Screenshot, um es zu sehen.
EDIT: Die Klasse, die diesen Code enthält, ist ein JPanel
EDIT2: Das Problem ist, dass, wenn ich richtig bewegen, wird die Schriftrolle nicht aktualisiert, so dass die maximun wenn ich setValue, ist nicht das letzte Maximum.
Dieses JPanel befindet sich in einem anderen JPanel, das ein Layout mit anderen Komponenten hat.
Also: in diesem JPanel habe ich eine JScrollBarPane mit einem JPanel, die die Komponenten haben, die ich zur Laufzeit hinzufüge. Dieses JPanel befindet sich in einem anderen JPanel. Wenn ich die Scrollbar-Position aktualisiere, ist die maximale Position nicht gleich der endgültigen maximalen Position dieser Iteration.
Die JScrollPane doenst auf die Größe des Fensters beeinflussen
Ich hoffe, das genug Informationen ist.
ich das Problem sehen, aber ich weiß nicht wie ich es beheben kann. Das Problem ist, dass wenn ich scroll.setValue(), Scrollbar nicht aktualisiert wird. Wenn ich es in meinem Hauptcode zwinge, nach rechts zu gehen, funktioniert es, aber in meinem Panel Code funktioniert es nicht.Ich bearbeite die Nachricht für weitere Informationen – Transy
@Transy Siehe meine Bearbeitung. Sie müssen die Reihenfolge Ihres Codes anpassen und ändern, was Sie erneut validieren. – sorifiend