2017-08-28 7 views
1

J'ai une grille avec des données et un JComboBox avec beaucoup d'utilisateurs dedans, dont un est sélectionné. Je voudrais faire défiler à l'élément sélectionné à la zone où l'utilisateur ne peut pas voir le reste des données (le bas de la grille) de sorte que mon JScrollPane passera à cette zone automatiquement.Java JComboBox défiler vers l'élément sélectionné

Comment puis-je faire cela?

Je pense que cela a quelque chose à voir avec la méthode scrollRectToVisible().

+1

chaque 'JComponent's (par exemple, déclarée comme variable locale) retourne sa' Bounds', utiliser ces valeurs de variable comme un rectangle, les paramètres déclarés 'scrollRectToVisible (JCOmponent.getBounds())' – mKorbel

Répondre

1

Un JComboBox ne nécessite pas JScrollPane.

import java.awt.*; 
import javax.swing.*; 
import javax.swing.border.EmptyBorder; 

public class OneLineCombo { 

    private JComponent ui = null; 

    OneLineCombo() { 
     initUI(); 
    } 

    public void initUI() { 
     if (ui!=null) return; 

     ui = new JPanel(new BorderLayout(4,4)); 
     ui.setBorder(new EmptyBorder(4,20,4,20)); 

     String[] fontFamily = GraphicsEnvironment. 
       getLocalGraphicsEnvironment().getAvailableFontFamilyNames(); 
     JComboBox fontCombo = new JComboBox(fontFamily); 
     fontCombo.setMaximumRowCount(1); 
     ui.add(fontCombo, BorderLayout.PAGE_START); 
     ui.add(new JLabel("Type some letters of the font name to select it"), 
       BorderLayout.PAGE_END); 
    } 

    public JComponent getUI() { 
     return ui; 
    } 

    public static void main(String[] args) { 
     Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (Exception useDefault) { 
       } 
       OneLineCombo o = new OneLineCombo(); 

       JFrame f = new JFrame(o.getClass().getSimpleName()); 
       f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
       f.setLocationByPlatform(true); 

       f.setContentPane(o.getUI()); 
       f.pack(); 
       f.setMinimumSize(f.getSize()); 

       f.setVisible(true); 
      } 
     }; 
     SwingUtilities.invokeLater(r); 
    } 
}