J'ai Un Jcombobox personalisé mais j'ai un problem ... l'image vous explique exactement le problem, y'a pas de scrollbarr![]()
J'ai Un Jcombobox personalisé mais j'ai un problem ... l'image vous explique exactement le problem, y'a pas de scrollbarr![]()
si tu nous montrais un peu de code, on pourrai peut-être t'aider un peu plus ...
NB
Désolé, mais je n'aperçois pas de ComboBox ... enfin, il y en a en bas à gauche, mais on ne peu pas voir si elle on un JScrollBar ...
la liste a gauche c'est la list du jcombobox ... et comme vous voyer elle n'est pas scrollable... et d'ailleur je ne sais pas le problem est ce que c'est dans la jcombobox ou dans le jpopumenu. voila mon code source
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
75
76
77 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package de.jugms.sd.components.comboboxes; /** * * @author hansolo */ public class SDComboBox extends javax.swing.JComboBox { private de.jugms.sd.tools.RadiusType radiusType; public SDComboBox() { super(); editor = new de.jugms.sd.components.comboboxes.SDComboBoxEditor(); setUI(new de.jugms.sd.ui.SDComboBoxUI(this)); setPreferredSize(new java.awt.Dimension(150, 22)); this.radiusType = de.jugms.sd.tools.RadiusType.ROUNDED; } public SDComboBox(javax.swing.ComboBoxModel model) { super(model); editor = new de.jugms.sd.components.comboboxes.SDComboBoxEditor(); setUI(new de.jugms.sd.ui.SDComboBoxUI(this)); setPreferredSize(new java.awt.Dimension(150, 22)); this.radiusType = de.jugms.sd.tools.RadiusType.ROUNDED; } public SDComboBox(Object[] items) { super(items); editor = new de.jugms.sd.components.comboboxes.SDComboBoxEditor(); setUI(new de.jugms.sd.ui.SDComboBoxUI(this)); setPreferredSize(new java.awt.Dimension(150, 22)); this.radiusType = de.jugms.sd.tools.RadiusType.ROUNDED; } public SDComboBox(java.util.Vector<?> items) { super(items); editor = new de.jugms.sd.components.comboboxes.SDComboBoxEditor(); setUI(new de.jugms.sd.ui.SDComboBoxUI(this)); setPreferredSize(new java.awt.Dimension(150, 22)); this.radiusType = de.jugms.sd.tools.RadiusType.ROUNDED; } @Override public void setEditable(boolean editable) { super.setEditable(editable); } public void setRadiusType(de.jugms.sd.tools.RadiusType radiusType) { this.radiusType = radiusType; ((de.jugms.sd.components.comboboxes.SDComboBoxEditor) getEditor()).setRadiusType(radiusType); ((de.jugms.sd.ui.SDComboBoxUI) getUI()).getArrowButton().setRadiusType(radiusType); ((de.jugms.sd.components.comboboxes.SDComboBoxCellRenderer) getRenderer()).setRadiusType(radiusType); } public de.jugms.sd.tools.RadiusType getRadiusType() { return this.radiusType; } @Override public String toString() { return "SDComboBox"; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package de.jugms.sd.components.comboboxes; import java.awt.event.ActionListener; import javax.swing.JScrollPane; import javax.swing.plaf.basic.BasicComboPopup; /** * * @author hansolo */ public class SDComboPopup extends BasicComboPopup implements ActionListener { private javax.swing.JPopupMenu popupMenu = new javax.swing.JPopupMenu(); private static final int LEFT_SHIFT = 22; public SDComboPopup(javax.swing.JComboBox combo) { super(combo); popupMenu.setUI(new de.jugms.sd.ui.SDPopupMenuUI()); this.comboBox = combo; comboBox.addActionListener(this); } private void clearAndFillMenu() { popupMenu.removeAll(); javax.swing.ButtonGroup buttonGroup = new javax.swing.ButtonGroup(); // add the given items to the popup menu. for (int i = 0; i < comboBox.getModel().getSize(); i++) { Object item = comboBox.getModel().getElementAt(i); de.jugms.sd.components.misc.SDMenuItem menuItem = new de.jugms.sd.components.misc.SDMenuItem(item.toString()); menuItem.addActionListener(createMenuItemListener(item)); buttonGroup.add(menuItem); popupMenu.add(menuItem); // if the current item is selected, make the menu item reflect that. if (item.equals(comboBox.getModel().getSelectedItem())) { menuItem.setSelected(true); popupMenu.setSelected(menuItem); } } popupMenu.pack(); int popupWidth = comboBox.getWidth() + 5; int popupHeight = popupMenu.getPreferredSize().height; popupMenu.setPreferredSize(new java.awt.Dimension(popupWidth, popupHeight)); } private java.awt.event.ActionListener createMenuItemListener(final Object comboBoxItem) { return new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent event) { comboBox.setSelectedItem(comboBoxItem); } }; } @Override public void show() { clearAndFillMenu(); java.awt.Rectangle popupBounds = calculateInitialPopupBounds(); popupMenu.show(comboBox, popupBounds.x, popupBounds.y); } @Override public void hide() { popupMenu.setVisible(false); } @Override public boolean isVisible() { return popupMenu.isVisible(); } private java.awt.Rectangle calculateInitialPopupBounds() { // grab the right most location of the button. int comboBoxRightEdge = comboBox.getWidth(); // figure out how the height of a menu item. java.awt.Insets insets = popupMenu.getInsets(); // calculate the x and y value at which to place the popup menu. by // default, this will place the selected menu item in the popup item // directly over the button. int x = comboBoxRightEdge - popupMenu.getPreferredSize().width - LEFT_SHIFT; int selectedItemIndex = popupMenu.getSelectionModel().getSelectedIndex(); int componentCenter = comboBox.getHeight() / 2; int menuItemHeight = popupMenu.getComponent(selectedItemIndex).getPreferredSize().height; int menuItemCenter = insets.top + (selectedItemIndex * menuItemHeight) + menuItemHeight / 2; int y = componentCenter - menuItemCenter; return new java.awt.Rectangle(new java.awt.Point(x, y), popupMenu.getPreferredSize()); } @Override public void actionPerformed(java.awt.event.ActionEvent event) { int popupWidth; int popupHeight; switch (comboBox.getSelectedIndex()) { case -1: comboBox.addItem(comboBox.getSelectedItem().toString()); popupWidth = comboBox.getWidth() + 5; popupHeight = popupMenu.getSize().height + popupMenu.getSubElements()[0].getComponent().getHeight(); popupMenu.setPreferredSize(new java.awt.Dimension(popupWidth, popupHeight)); break; default: if (comboBox.getSelectedItem().toString().isEmpty()) { comboBox.removeItemAt(comboBox.getSelectedIndex()); popupWidth = comboBox.getWidth() + 5; popupHeight = popupMenu.getSize().height + popupMenu.getSubElements()[0].getComponent().getHeight(); popupMenu.setPreferredSize(new java.awt.Dimension(popupWidth, popupHeight)); } break; } } @Override public String toString() { return "SDComboPopup"; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
75
76
77 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package de.jugms.sd.ui; import de.jugms.sd.components.comboboxes.SDComboBoxCellRenderer; import de.jugms.sd.components.comboboxes.SDComboBoxEditor; /** * * @author hansolo */ public class SDComboBoxUI extends javax.swing.plaf.basic.BasicComboBoxUI implements javax.swing.SwingConstants { private de.jugms.sd.tools.RadiusType radiusType; de.jugms.sd.components.buttons.SDArrowButton button; public SDComboBoxUI(javax.swing.JComboBox comboBox) { super(); super.comboBox = comboBox; comboBox.setOpaque(false); comboBox.setForeground(new java.awt.Color(1.0f, 1.0f, 1.0f, 0.6f)); comboBox.setFont(new java.awt.Font("Verdana", 0, 12)); this.radiusType = de.jugms.sd.tools.RadiusType.ROUNDED; if (comboBox.isEditable()) { comboBox.setEditor(new SDComboBoxEditor()); } else { comboBox.setRenderer(new SDComboBoxCellRenderer(comboBox)); } } public de.jugms.sd.components.buttons.SDArrowButton getArrowButton() { return this.button; } @Override protected javax.swing.plaf.basic.ComboPopup createPopup() { popup = new de.jugms.sd.components.comboboxes.SDComboPopup(comboBox); return popup; } @Override protected javax.swing.JButton createArrowButton() { button = new de.jugms.sd.components.buttons.SDArrowButton(SOUTH, EAST); button.setRadiusType(this.radiusType); button.setName("ComboBox.arrowButton"); return button; } public void setRadiusType(de.jugms.sd.tools.RadiusType radiusType) { this.radiusType = radiusType; } public de.jugms.sd.tools.RadiusType getRadiusType() { return this.radiusType; } @Override public String toString() { return "SDComboBoxUI"; } }
C'est le "truc" noir en haut à gauche au-dessus de l'onglet serveur ?
Je crois que le ScrollBar n'apparaît pas parce qu'il n'y a pas besoin
je pense qu'il existe une méthode pour forcer l'affichage des barres de défilement ... mais je ne sait plus laquelle peut-être setAutoScrolls, mais je ne te promet rien
Partager