Java Swing - JScrollPane'i Kullanma ve Başa Döndürme


82

Metin düzenleyici görevi gören bir metin bileşenine sahip bir JFrame'de kaydırmaya izin vermek için JScrollPane kullanıyorum. Bu düzenleyicide metni ayarladıktan sonra yapmak istediğim şey, dosyanın en üste kaydırılmasını sağlamak, böylece dosyanın başında ne olduğunu görebilirsiniz.

Bunun nasıl yapılacağını bilen var mı?

java  swing 

Yanıtlar:


136

Metin bileşeninizde setCaretPosition (0) çağrılması , en üste kaydırılmasına neden olacaktır.


Haklısınız, sorun imlecin metin bileşeninin sonunda olmasıydı. Metin düzenleyicide 'setText (...)' çağrıldıktan sonra da çalışır. (JScrollPane içinde metin paneli olarak bir JEditorPane örneği ile test edilmiştir).
Guillaume

37

Bir metin bileşeni kullanmıyorsanız, burada yayınlanan konu dizisine bakın .... Bir JScrollPane üzerinde Kaydırma Çubuğu Ayarlama

Çözümleri invokeLater aracılığıyla bir iş parçacığını döndürmektir.

final JScrollPane scroll = new JScrollPane(text);
javax.swing.SwingUtilities.invokeLater(new Runnable() {
   public void run() { 
       scroll.getVerticalScrollBar().setValue(0);
   }
});

1
Soruma en yakın cevap budur .. stackoverflow.com/questions/42961012/… Ancak, JScrollPane içinde panel varsa bu yöntemi nasıl kullanabilirim?
In-young Choung

3
invokeLaterbir iş parçacığını döndürmez, sadece geçerli olaydan sonra yürütülecek bir olayı sıralar (örneğin, düğme tıklaması veya çağıran kodun bağlamı ne olursa olsun invokeLater) ve diğer önceden sıraya alınmış olaylar biter.
Radiodef

10

Bu işi yapacak:

DefaultCaret caret = (DefaultCaret) textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE);

9

Yöntemi metin bileşeninizden setCaretPosition(0)hemen sonra kullanabilirsiniz setText(String t).


1
@ Craig'in önceki cevabının bir kopyası.
Karl Richter


7

Bunu deneyebilirsiniz:

 scrollPane.getViewport().setViewPosition(new Point(0,0));

JavaDocs'a göre setViewPosition () şu şekilde davranır:

Görünümün sol üst köşesinde görünen görünüm koordinatlarını ayarlar, görünüm yoksa hiçbir şey yapmaz.


4
Bu benim için işe yaramadı - ScrollPane en üste atlar ve ardından hemen tekrar aşağıya düşer.
jwoolard

Benim için çalıştı ¯ \ _ (ツ) _ / ¯ JScrollPane'imin içinde bir JTable'ım var.
mikato

@jwoolard Evet, burada sunulan çözüm, karşılaştığım bazı durumlarda işe yaramıyor. ANCAK, bu sabah ortaya koyduğum çözümü not edin.
Richard T

2

Bunu nasıl yapacağınız aşağıda açıklanmıştır:

textArea.setSelectionStart(0);
textArea.setSelectionEnd(0); 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.