fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6. import java.awt.KeyboardFocusManager;
  7. import java.beans.PropertyChangeEvent;
  8. import java.beans.PropertyChangeListener;
  9. import java.util.Random;
  10.  
  11. import javax.swing.BoxLayout;
  12. import javax.swing.JComponent;
  13. import javax.swing.JFrame;
  14. import javax.swing.JLabel;
  15. import javax.swing.JPanel;
  16. import javax.swing.JScrollPane;
  17. import javax.swing.JTextField;
  18.  
  19. /* Name of the class has to be "Main" only if the class is public. */
  20. class Ideone
  21. {
  22. private final static int FILAS = 50;
  23. private final static String nombresDeColumna[] =
  24. { "Nombre" };
  25. private final static String[] datos = { "Jordi" , "Castilla", "Mymike", "Mine", "Luiggi", "Mendoza", "Super", "Falete" };
  26. private final static Random rnd = new Random();
  27.  
  28. public static void main (String[] args) throws java.lang.Exception
  29. {
  30. final JPanel contenedor = new JPanel();
  31. contenedor.setLayout(new BoxLayout(contenedor, BoxLayout.Y_AXIS));
  32. contenedor.add(new JLabel("Usa tabulador para cambiar de fila."));
  33. JTextField campo = null;
  34. for (int i = 0; i < FILAS; i++) {
  35. campo = new JTextField("" + i);
  36. campo.setText(datos[rnd.nextInt(datos.length)]);
  37. campo.setName("campo #" + i);
  38. contenedor.add(campo);
  39. }
  40.  
  41. KeyboardFocusManager.getCurrentKeyboardFocusManager().addPropertyChangeListener("focusOwner", new PropertyChangeListener() {
  42. public void propertyChange(PropertyChangeEvent evt) {
  43. // ignoramos todo lo que no sea un componente
  44. if (!(evt.getNewValue() instanceof JComponent)) {
  45. return;
  46. }
  47. // cojemos el elemento, miramos que este en el contenedor
  48. JComponent elementoEnfocado = (JComponent) evt.getNewValue();
  49. if (contenedor.isAncestorOf(elementoEnfocado)) {
  50. // y si es candidato, "enfocamos" el contenedor a la altura del elemento
  51. contenedor.scrollRectToVisible(elementoEnfocado.getBounds());
  52. System.out.println("Vamos al "+ elementoEnfocado.getName());
  53. }
  54. }
  55. });
  56.  
  57. JFrame window = new JFrame("Siguiendo el foco");
  58. window.setContentPane(new JScrollPane(contenedor));
  59. window.setSize(400, 600);
  60. window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  61. window.setVisible(true);
  62.  
  63. // seleccionamos el ultimo campo para ver como se comporta al recibir el foco.
  64. campo.requestFocusInWindow();
  65.  
  66. }
  67. }
Runtime error #stdin #stdout #stderr 0.34s 323328KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Exception in thread "main" java.lang.UnsatisfiedLinkError: /opt/jdk/jre/lib/i386/libfontmanager.so: libgcc_s.so.1: cannot open shared object file: No such file or directory
	at java.lang.ClassLoader$NativeLibrary.load(Native Method)
	at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1937)
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1843)
	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
	at java.lang.System.loadLibrary(System.java:1122)
	at sun.font.FontManagerNativeLibrary$1.run(FontManagerNativeLibrary.java:61)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.font.FontManagerNativeLibrary.<clinit>(FontManagerNativeLibrary.java:32)
	at sun.font.SunFontManager$1.run(SunFontManager.java:339)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.font.SunFontManager.<clinit>(SunFontManager.java:335)
	at sun.font.FontDesignMetrics.getMetrics(FontDesignMetrics.java:264)
	at sun.swing.SwingUtilities2.getFontMetrics(SwingUtilities2.java:1113)
	at javax.swing.JComponent.getFontMetrics(JComponent.java:1626)
	at javax.swing.text.PlainView.calculateLongestLine(PlainView.java:639)
	at javax.swing.text.PlainView.updateMetrics(PlainView.java:209)
	at javax.swing.text.PlainView.updateDamage(PlainView.java:527)
	at javax.swing.text.PlainView.insertUpdate(PlainView.java:451)
	at javax.swing.text.FieldView.insertUpdate(FieldView.java:293)
	at javax.swing.plaf.basic.BasicTextUI$RootView.insertUpdate(BasicTextUI.java:1610)
	at javax.swing.plaf.basic.BasicTextUI$UpdateHandler.insertUpdate(BasicTextUI.java:1869)
	at javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.java:201)
	at javax.swing.text.AbstractDocument.handleInsertString(AbstractDocument.java:748)
	at javax.swing.text.AbstractDocument.insertString(AbstractDocument.java:707)
	at javax.swing.text.PlainDocument.insertString(PlainDocument.java:130)
	at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:669)
	at javax.swing.text.JTextComponent.setText(JTextComponent.java:1669)
	at javax.swing.JTextField.<init>(JTextField.java:243)
	at javax.swing.JTextField.<init>(JTextField.java:183)
	at Ideone.main(Main.java:35)