2017-08-28 1 views
1

Ich habe ein Raster mit Daten und einem JComboBox mit vielen Benutzern darin, von denen eine ausgewählt ist. Ich möchte zu dem ausgewählten Element zu dem Bereich scrollen, in dem Benutzer den Rest der Daten (die Unterseite des Rasters) nicht sehen kann, so dass mein JScrollPane automatisch zu diesem Bereich springt.Java JComboBox blättern zum ausgewählten Element

Wie kann ich das tun?

Ich denke, das hat etwas mit scrollRectToVisible() Methode zu tun.

+1

jeder 'JComponent's (beispielsweise als lokale Variable deklariert) liefert dessen' Bounds', diese Werte von Variable als Rechteck, Parameter 'scrollRectToVisible (JCOmponent.getBounds()) erklärt Verwenden' – mKorbel

Antwort

1

Ein JComboBox benötigt keine 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); 
    } 
} 
Verwandte Themen