tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von HonniCilest
ERLEDIGT
JA
ANTWORTEN
1
ZUGRIFFE
657
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    hansmueller hansmueller ist offline Mitglied Silber
    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
     

  2. #2
    Avatar von HonniCilest
    HonniCilest HonniCilest ist offline Mitglied Platin
    Registriert seit
    Jun 2009
    Ort
    Java Insel
    Beiträge
    501
    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.
    hansmueller bedankt sich. 
    Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
    ...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.

Ähnliche Themen

  1. JOptionPane mit JSpinner
    Von takidoso im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 20.01.09, 14:50
  2. JSpinner & KeyListener
    Von javasdann im Forum Java
    Antworten: 6
    Letzter Beitrag: 29.10.08, 12:38
  3. JSpinner Anzeigefehler
    Von Choe im Forum Java
    Antworten: 6
    Letzter Beitrag: 20.08.08, 13:53
  4. JSpinner Problem
    Von bjmicha im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 22.09.05, 11:41
  5. JSpinner editable
    Von jean luc im Forum Java
    Antworten: 0
    Letzter Beitrag: 10.06.05, 18:16

Stichworte