To dziwne, że JScrollPane
nie ma metody addAdjustmentListener()
. Jednak adjustListener jest podobno używany z paskami przewijania. Chcę, aby coś się działo, kiedy JScrollPane
przewija się w dowolny sposób. Jak osiągnąć coś takiego?Zwój zdarzenia JScrollPane
15
A
Odpowiedz
9
Dlaczego nie otrzymasz rzeczywistych pasków przewijania, a następnie dodasz do nich odbiorców regulacji? JScrollBar
ma metodę o nazwie addAdjustmentListener()
.
i można korzystać getVerticalScrollBar()
i getHorizontalScrollBar()
dostać JScrollBar
od A JScrollPane
14
Zamiast próbować słuchać na przemian z JScrollPane, uzyskać rzutnię dla tego panelu przewijania dodać detektor zmian do niego:
1
na przykład (old.good.forums.sun.com)
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.*;
public class TilePainter extends JPanel implements Scrollable {
private static final long serialVersionUID = 1L;
private final int TILE_SIZE = 50;
private final int TILE_COUNT = 100;
private final int visibleTiles = 10;
private final boolean[][] loaded;
private final boolean[][] loading;
private final Random random;
public TilePainter() {
setPreferredSize(new Dimension(TILE_SIZE * TILE_COUNT, TILE_SIZE * TILE_COUNT));
loaded = new boolean[TILE_COUNT][TILE_COUNT];
loading = new boolean[TILE_COUNT][TILE_COUNT];
random = new Random();
}
public boolean getTile(final int x, final int y) {
boolean canPaint = loaded[x][y];
if (!canPaint && !loading[x][y]) {
loading[x][y] = true;
Timer timer = new Timer(random.nextInt(500),
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
loaded[x][y] = true;
repaint(x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE);
}
});
timer.setRepeats(false);
timer.start();
}
return canPaint;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Rectangle clip = g.getClipBounds();
int startX = clip.x - (clip.x % TILE_SIZE);
int startY = clip.y - (clip.y % TILE_SIZE);
for (int x = startX; x < clip.x + clip.width; x += TILE_SIZE) {
for (int y = startY; y < clip.y + clip.height; y += TILE_SIZE) {
if (getTile(x/TILE_SIZE, y/TILE_SIZE)) {
g.setColor(Color.GREEN);
} else {
g.setColor(Color.RED);
}
g.fillRect(x, y, TILE_SIZE - 1, TILE_SIZE - 1);
}
}
}
@Override
public Dimension getPreferredScrollableViewportSize() {
return new Dimension(visibleTiles * TILE_SIZE, visibleTiles * TILE_SIZE);
}
@Override
public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
return TILE_SIZE * Math.max(1, visibleTiles - 1);
}
@Override
public boolean getScrollableTracksViewportHeight() {
return false;
}
@Override
public boolean getScrollableTracksViewportWidth() {
return false;
}
@Override
public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
return TILE_SIZE;
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("Tiles");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(new JScrollPane(new TilePainter()));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
+0
+1 dla historii. – trashgod
5
Według Jesse Barnum:
// requiring that you already have JPanel additionsPane inside
// JScrollPane additionsScrollPane inside JFrame frame ...
additionsScrollPane.getViewport().addChangeListener(new ListenAdditionsScrolled());
public class ListenAdditionsScrolled implements ChangeListener{
public void stateChanged(ChangeEvent e){
additionsPane.revalidate();
frame.repaint();
}
}
Powiązane problemy
- 1. js Zrób gładki zwój
- 2. Zniszcz jScrollPane
- 3. Scroll Webview wewnątrz zwój Zobacz
- 4. JScrollPane i JList Autoprzewijanie
- 5. Ogranicz szerokość widoku JScrollPane
- 6. Pobierz komponent z JScrollPane
- 7. JScrollPane i jQuery 1.8.0
- 8. jScrollPane setVisible nie działa
- 9. blok przewijania jscrollpane rodzic
- 10. UI GRID niesamowicie szybki pionowy zwój wydania
- 11. Windows Phone zawartość 8 Zwój tekstowym
- 12. JScrollPane - Przybliżenie względem pozycji myszy
- 13. Dynamiczne dodawanie JTable do JScrollPane
- 14. Zdarzenia wielokrotnego zdarzenia javascript wielokrotnego zdarzenia raz
- 15. Przyspieszenie kółka myszy w jScrollPane (jQuery)
- 16. Jak przewinąć do określonej lokalizacji w JScrollPane
- 17. Zmiana koloru kciuka i koloru tła JScrollPane?
- 18. JScrollPane nie działa poprawnie z ukrytą zawartością
- 19. Problem z wysokością jScrollPane 2.0 w chrome
- 20. JScrollPane z paskiem przewijania w lewo
- 21. JTable w JScrollPane, jak ustawić tło?
- 22. JScrollPane z przezroczystym tłem i zawartością
- 23. jak uzyskać niestandardowy zwój w firefoxie i IE?
- 24. ember.js przywrócić zwój na historii, Reset przewinąć na link
- 25. UITableView utrzymuj zwój w poprawnej pozycji podczas aktualizacji NSFetchedResultsController
- 26. Jak zaimplementować nieskończony/nieskończony zwój wewnątrz DIV w JavaScript/jQuery
- 27. Zdarzenia dotyczące przewijania inercyjnego na mobilnym Safari
- 28. JavaScript jak znaleźć źródło zdarzenia przewijania
- 29. Wystrzeliwanie zdarzenia onItemDisclosure powoduje wywołanie zdarzenia itemtap.
- 30. Konwersja GWT Kliknij zdarzenia, aby dotknąć zdarzenia
Uważam, że jest to najlepszy sposób. Wkleiłem nawet mój kod pomocniczy poniżej. Dzięki, Eugene. – ekerner