ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
3725
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    Registriert seit
    Apr 2006
    Beiträge
    9
    Hey Leute,
    Ich habe folgendes Problem:
    Ich will eine JComboBox die eine bestimmte breite hat und sich nicht dem längstem Item anpasst (erledigt)
    Anschließend soll das Popup wenn man es öffnet groß genug sein um die Items in voller länge sehen zu können (erledigt, mit PopupListener-"Hack")
    Nun kommt mein Problem: Das Popup ist zwar an sich größer, aber die Items in dem Popup samt Scrollbar (dem JScrollPane aus dem PopupMenu) werden trotzdem nicht größer! Das ganze hängt nur mit dem GridBagLayout zusammen, also mit der Breite der Zelle!
    ohne GridBagLayout funktioniert das ganze, kann mir wer helfen das auch für das GridBagLayout zum laufen zu bekommen? Wie gesagt das Problem liegt an der Zellen-Breite, da die Items exakt immernoch die breite der Zelle haben!

    Ist relativ schwer zu verstehen, deswegen hier ein Beispiel: (nach ausführen sollte es sofort selbsterklärend sein)

    vielen Dank im Vorraus Leute!

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    
    import javax.swing.*;
    import javax.swing.event.PopupMenuListener;
    import javax.swing.event.PopupMenuEvent;
    import java.awt.*;
    import java.util.Vector;
     
     
    public class Test extends JFrame implements PopupMenuListener{
        public JPanel        panel    = new JPanel();
        public GridBagLayout gbl      = new GridBagLayout();
     
        public Vector<String> vecValues  = new Vector<String>();
        public JLabel         labelName  = new JLabel("Blubb");
        public JComboBox      comboBox1  = new JComboBox(vecValues);
     
        public Test() {
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setVisible(true);
     
            for(int i = 0; i < 20; i++)
                vecValues.addElement(i + "cccccccccccccccccccccccccccc");
     
            labelName.setPreferredSize(new Dimension(100, (int) labelName.getPreferredSize().getHeight()));
            comboBox1.setPrototypeDisplayValue(0);
            comboBox1.setSelectedIndex(0);
     
            panel.setLayout(gbl);
            getContentPane().add(panel);
     
            addComponent(panel, gbl, labelName  , 0, 0, 1, 1, 1.0, 1.0, 10, 10, 10, 10);
            addComponent(panel, gbl, comboBox1  , 0, 1, 1, 1, 0.0, 0.0, 10, 10, 10, 10);
     
            comboBox1.addPopupMenuListener(this);
     
            pack();
        }
     
        public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
            JComboBox box = (JComboBox) e.getSource();
            Object comp = box.getUI().getAccessibleChild(box, 0);
            if (!(comp instanceof JPopupMenu)) return;
            JComponent scrollPane = (JComponent) ((JPopupMenu) comp).getComponent(0);
            Dimension size = new Dimension();
            size.width = 200;
            size.height = scrollPane.getPreferredSize().height;
            scrollPane.setPreferredSize(size);
        }
        public void popupMenuWillBecomeInvisible(PopupMenuEvent event) {}
        public void popupMenuCanceled(PopupMenuEvent event) {}
     
        private void addComponent(Container cont, GridBagLayout gbl, Component c, int x, int y, int width, int height, double weightx, double weighty, int ... iInsets) {
            int[] insets = new int[]{0, 0, 0, 0};
     
            if(iInsets.length > 4) {
                throw new IllegalArgumentException("max 4 parameters allowed for iInsets");
            }
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.fill = GridBagConstraints.BOTH; // wie Komponente Bereich füllen soll
            gbc.gridx = x;            // x-Position
            gbc.gridy = y;            // <-Position
            gbc.gridwidth = width;    // Breite
            gbc.gridheight = height;  // Höhe
            gbc.weightx = weightx;
            gbc.weighty = weighty;
            System.arraycopy(iInsets, 0, insets, 0, iInsets.length);
            gbc.insets = new Insets(insets[0], insets[1], insets[2], insets[3]); // Abstände definieren
            gbl.setConstraints(c, gbc);
            cont.add(c);
        }
     
        public static void main (String args[]) {
            new Test();
        }
    }
     

  2. #2
    elmato ist offline Mitglied Brokat
    Registriert seit
    May 2005
    Ort
    NRW
    Beiträge
    408
    Hast du dir das http://www.java2s.com/Code/Java/Swin...BoxExample.htm
    schon mal angesehen, klingt nachdem was du gerne realisieren möchtest..
    mfg
    elmato
     
    Been there, done that, got the T-Shirt..

  3. #3
    Registriert seit
    Apr 2006
    Beiträge
    9
    jo genau das wollte ich eigentlich verhindern... wollte eigentlich dafür nich extra dem Model umschreiben...
    hmm schau ich mir aber gleich mal an
     

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 11.01.11, 14:35
  2. Div wird beim vergrößern verkleinert?!
    Von Major18 im Forum CSS
    Antworten: 4
    Letzter Beitrag: 14.02.10, 16:40
  3. Breite einer JComboBox im GridBagLayout
    Von Hypnos im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 22.10.05, 17:57
  4. Positionierung der Elemente beim GridBagLayout
    Von Aurelie im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 06.08.05, 23:23
  5. Pause beim Vergrößern
    Von meste im Forum Flash Plattform
    Antworten: 6
    Letzter Beitrag: 02.08.05, 16:36