1Danke
ERLEDIGT
JA
JA
ANTWORTEN
1
1
ZUGRIFFE
657
657
EMPFEHLEN
-
18.06.10 13:30 #1
- Registriert seit
- Sep 2008
- Beiträge
- 78
Hallo,
ich möchte eine JList erstellen, in der JSpinner vorhanden sind.
Hintergrund:
Ich möchte eine Liste erstellen die verschiedene Einträge enthält (dafür sind Listen ja da ).
Jeder Eintrag kann aus einem oder mehreren Artikeln bestehen.
Bei manchen dieser Artikel soll man die Anzahl ändern können.
Ich habe hier ein kleines kompilierbares Beispielprogramm zum Testen geschrieben:
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 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 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204
import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.GridLayout; import javax.swing.BorderFactory; import javax.swing.DefaultListModel; import javax.swing.GroupLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSpinner; import javax.swing.ListCellRenderer; import javax.swing.SpinnerNumberModel; import javax.swing.SwingConstants; public class MainProg { JFrame f; public static void main(String[] args) { MainProg x = new MainProg(); } public MainProg() { f = new JFrame("Test Auswahlpanel"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setLayout(new GridLayout(1, 2)); f.setPreferredSize(new Dimension(600, 300)); DefaultListModel StandardListenModel = new DefaultListModel(); ListenEintrag le1 = new ListenEintrag("Test 1","Versuch 1","Irrtum 1",5); ListenEintrag le2 = new ListenEintrag("Test 2","Versuch 2",null,null); ListenEintrag le3 = new ListenEintrag("Test 3","Versuch 3",null,25); ListenEintrag le4 = new ListenEintrag("Test 4","Versuch 4","Irrtum 4",null); StandardListenModel.addElement(le1); StandardListenModel.addElement(le2); StandardListenModel.addElement(le3); StandardListenModel.addElement(le4); JList Liste = new JList(StandardListenModel); Liste.setCellRenderer(new MeinCellRenderer()); f.add(new JScrollPane(Liste)); f.pack(); f.setVisible(true); } public class ListenEintrag { private String s1,s2,s3; private Integer i1; public ListenEintrag(String p_s1, String p_s2, String p_s3, Integer p_i1) { this.s1 = p_s1; this.s2 = p_s2; this.s3 = p_s3; this.i1 = p_i1; } public String getS1() { return s1; } public String getS2() { return s2; } public String getS3() { return s3; } public Integer geti1() { return i1; } } public class MeinCellRenderer extends JPanel implements ListCellRenderer { JLabel lb1,lb2,lb3,lb4; JSpinner sp1; public MeinCellRenderer() { setBorder(BorderFactory.createLineBorder(Color.MAGENTA, 3)); setOpaque(true); lb1 = new JLabel(); lb2 = new JLabel(); lb3 = new JLabel(); sp1 = new JSpinner(new SpinnerNumberModel(30,0,100,1)); lb1.setPreferredSize(new Dimension(100, 2)); lb1.setOpaque(false); lb2.setOpaque(false); lb3.setOpaque(false); sp1.setOpaque(false); lb1.setBorder(BorderFactory.createLineBorder(Color.PINK, 2)); lb2.setBorder(BorderFactory.createLineBorder(Color.PINK, 2)); lb3.setBorder(BorderFactory.createLineBorder(Color.PINK, 2)); sp1.setBorder(BorderFactory.createLineBorder(Color.PINK, 2)); GroupLayout gl = new GroupLayout(this); setLayout(gl); gl.setHorizontalGroup(gl.createSequentialGroup() .addGroup(gl.createParallelGroup() .addComponent(lb1) .addComponent(lb3)) .addGroup(gl.createParallelGroup() .addComponent(lb2) .addComponent(sp1)) ); gl.setVerticalGroup(gl.createSequentialGroup() .addGroup(gl.createParallelGroup() .addComponent(lb1) .addComponent(lb2)) .addGroup(gl.createParallelGroup() .addComponent(lb3) .addComponent(sp1)) ); gl.setHonorsVisibility(true); gl.linkSize(SwingConstants.HORIZONTAL, lb1, lb3); } @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { String x1 = (((ListenEintrag)value).getS1()); String x2 = (((ListenEintrag)value).getS2()); String x3 = (((ListenEintrag)value).getS3()); Integer x4 = (((ListenEintrag)value).geti1()); lb1.setText(x1); lb2.setText(x2); if(x3 == null) { lb3.setVisible(false); } else { lb3.setText(x3); lb3.setVisible(true); } if(x4 == null) { sp1.setVisible(false); } else { sp1.setValue(x4); sp1.setVisible(true); } if(isSelected) { setBackground(Color.green); } else { setBackground(list.getBackground()); } return this; } } }
Wie ihr seht habe ich ein bischen mit dem Ein- und Ausblenden von den Elementen experimentiert.
Auch das Anzeigen der JSpinner funktioniert.
Aber ich kann die Werte nicht ändern.
Es ist so, als würde der JSpinner zwar gezeichnet, aber ohne Funktion.
Gibt es eine (einfache) Möglichkeit die JSpinner in einer JList mit Leben zu erfüllen?
Ist dies mit der JList überhaupt möglich?
(Ich möchte eigendlich keine JTable verwenden, da diese mir (noch) etwas zu kompliziert ist.)
MfG
hansmueller
-
18.06.10 18:19 #2
Soweit ich weiß ist das, was du vorhast nicht möglich. Das hat folgenden Grund:
Die Komponenten, die vom CellRenderer zurückgegeben werden werden, wie der Name schon sagt, zum Rendern verwendet. Das bedeudet so viel wie es wird ein Bild generiert. In diesem Fall würde man vermutlich eher von grafischer Benutzeroberfläche oder ähnlichem reden
Jedenfalls wirkt es sich auf dein Programm aus. Der Knackpunkt ist der ComponentTree, welcher nicht implementiert wird und daher auch nicht auf Events reagieren wird.
Helfen könnte dir eventuell der CellEditor, welcher von der JTable implementiert wird.Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.
Ähnliche Themen
-
JOptionPane mit JSpinner
Von takidoso im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 20.01.09, 14:50 -
JSpinner & KeyListener
Von javasdann im Forum JavaAntworten: 6Letzter Beitrag: 29.10.08, 12:38 -
JSpinner Anzeigefehler
Von Choe im Forum JavaAntworten: 6Letzter Beitrag: 20.08.08, 13:53 -
JSpinner Problem
Von bjmicha im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 22.09.05, 11:41 -
JSpinner editable
Von jean luc im Forum JavaAntworten: 0Letzter Beitrag: 10.06.05, 18:16





Zitieren
Login





