Ciao a tutti,
premetto che questa volta non ho nemmeno una vaga idea di come potrei farlo,
ma è possibile spostare in giù una scrollbar di un JScrollPane se premendo tab
si va su un component del pannello che non è possibile vedere?
Ciao a tutti,
premetto che questa volta non ho nemmeno una vaga idea di come potrei farlo,
ma è possibile spostare in giù una scrollbar di un JScrollPane se premendo tab
si va su un component del pannello che non è possibile vedere?
Si può fare. Il concetto, a grandi linee, dovrebbe essere questo: registrare un listener per "ascoltare" la acquisizione del "focus" sul/i componente/i e quando riceve il focus, se il suo "parente" è un JComponent, invocare su questo parente il scrollRectToVisible(rect) passando il rettangolo del componente che ha ricevuto il focus.Originariamente inviato da lotus1989
premetto che questa volta non ho nemmeno una vaga idea di come potrei farlo,
ma è possibile spostare in giù una scrollbar di un JScrollPane se premendo tab
si va su un component del pannello che non è possibile vedere?
In sostanza si dice: "senti parente, rendi visibile quella area (il componente)". Se il parente ha come "progenitore" un JViewport (del JScrollPane), avverrà lo scrolling effettivo.
Se ci fossero molti componenti su cui registrare il listener o comunque non si vuole fare così, si può registrare un listener "globale" attraverso un addPropertyChangeListener di java.awt.KeyboardFocusManager.
Se non è chiaro o ci sono dubbi, posso fare un esempio.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Hehe se posso ti rubo un mini esempietto se hai tempo.Originariamente inviato da andbin
Se non è chiaro o ci sono dubbi, posso fare un esempio.
La situazione in cui mi trovo e quella di avere una 40ina di componenti
che hanno reso necessario l'utilizzo di un JscrollPane di appoggio
per fare uno scrollVerticale se lo schermo è troppo piccolo..
Quello che vorrei fare è abbonare tutte le componenti a gestire questa possibilità di cambiamento
però proprio a livello di codice non riesco bene a capire con che logica farlo..
tipo se la 39esima component acquisisce il focus, io dovrei capirlo (penso focuslistner con getfocus)
guardare se è visibile (cosa che non ho capito come capire)
e poi dire allo scroll di adattare il contenuto che mi interessa a visibile...
Esempio per gestire lo scrolling automatico in modo globale:
codice:import java.awt.*; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeEvent; import javax.swing.*; public class TestFrame extends JFrame { public TestFrame() { super("Test Frame"); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); setSize(300, 250); JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); // ... molti componenti giusto per prova ... for (int i = 0; i < 20; i++) { panel.add(new JTextField()); panel.add(new JButton(""+i)); } // ... pannello dentro scroll-pane dentro content-pane ... getContentPane().add(new JScrollPane(panel)); KeyboardFocusManager kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager(); // ... registra un listener "globale" per il focus ... kfm.addPropertyChangeListener("focusOwner", new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent e) { if (e.getNewValue() instanceof Component) { Component comp = (Component) e.getNewValue(); Container parent = comp.getParent(); if (parent instanceof JComponent) { // ... chiede al parente di rendere visibile l'area del componente ... ((JComponent) parent).scrollRectToVisible(comp.getBounds()); } } } }); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new TestFrame().setVisible(true); } }); } }
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Grazieissimeeeeeee!Originariamente inviato da andbin
Esempio per gestire lo scrolling automatico in modo globale:
codice:public class TestFrame extends JFrame {.....}
Appena torno questa sera lo provo e lo adatto al mio pannello
devo dire che da solo non avrei nemmeno saputo dove metter mano (ora ne ho la conferma)