我正在使用JscrollPane添加元素,當我有7個以上時,我的JScrollPane中的JScrollBar被激活。我需要的是,當我介紹一個新的元素,滾動條移動到右側將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將滾動條移動到右側,但對我來說,它保持靠近右側但不是正確的位置。
謝謝你的時間。
下面是截圖。
編輯:包含代碼的類是一個JPanel
EDIT2:問題是,當我向右移動,滾動沒有更新,所以當我SETVALUE的maximun,是不是最後的最大值。
此JPanel位於另一個具有其他組件的佈局的JPanel內。
因此:在這個JPanel中,我有一個帶有JPanel的JScrollBarPane,它具有我在運行時添加的組件。這個JPanel在另一個JPanel中。當我更新滾動條位置時,最大位置不等於此迭代的最終最大位置。
JScrollPane的doenst影響到窗口
我希望這是足夠的信息的大小。
我看到這個問題,但我不知道我該如何解決它。問題是,當我做scroll.setValue(),滾動條不更新。如果在我的主代碼中強制它移動到右側,它可以工作,但在我的Panel代碼中,不工作。我編輯信息以獲取更多信息 – Transy
@Transy查看我的編輯。您需要調整代碼的順序並更改要重新驗證的內容。 – sorifiend