JCheckboxern optisch trennen

zuckerbrini

Mitglied
Hi!

Also... wie der Titel schon sagt möchte ich gerne JCheckboxen optisch trennen, d.h. nach jeder Checkbox kommt ein Strich.

Nun habe ich das ganze mit einem JSeparator probiert. Das funktioniert soweit ja auch. Meine JCheckboxen haben aber alle eine Hintergrundfarbe. Sobald ich nun nur mit der Maus darüber fahre ist der Separator auf einmal weg.
Ich vermute, dass sobald ich eine Checkbox berühre diese in den Vordergrund gelegt wird und ich somit den Strich nicht mehr sehe. Kann ich dieses Verhalten irgendwie unterbinden? Bzw. kennt irgendjemand eine andere Möglichkeit um dieses zu erreichen?

Achja.... natürlich soll die JCheckbox klickbar bleiben....
 
rs ist das ResultSet
jp ist das JPanel auf das ich zeichne.
i ist ein int der immer erhöht wird um gridy zu verändern
Code:
while(rs.next()) {   
                JSeparator sep = new JSeparator();
                gbc = new GridBagConstraints();
                gbc.gridx = 0;
                gbc.gridy = i;
                gbc.gridwidth = 5;
                gbc.fill = java.awt.GridBagConstraints.BOTH;
                jp.add(sep, gbc);
                
                gbc = new GridBagConstraints();
                gbc.gridx = 0;
                gbc.gridy = i;
                gbc.gridwidth = 3;
                gbc.fill = java.awt.GridBagConstraints.BOTH;
                JCheckBox jcb = new JCheckBox();
                jp.remove(jcb);
                jcb.setName(rs.getInt("id"));
                jcb.setText(rs.getString("betreff"));
                jcb.addItemListener(stateListener);
                jcb.setBackground(gelb);
                jcb.setSelected(true);
                jcb.setVisible(true);
                jcb.setBounds(2, i*20, 200, 20);
                jp.add(jcb, gbc);
           
                i++;
}
 
Du kannst das verhalten unterbinden. Das ist auch ganz einfach. ;-)
Du solltest der Checkbox und dem Separator nicht die gleiche Zelle im Layout zuordnen.

Angenommen i = 1
Du setzt den Separator bei gridwidth auf 1 und die Checkbox.

Du musst i einfach noch einmal hochzählen, wenn du den Separator erstellt hast.

Code:
while(rs.next()) {   
                JSeparator sep = new JSeparator();
                gbc = new GridBagConstraints();
                gbc.gridx = 0;
                gbc.gridy = i;
                gbc.gridwidth = 5;
                gbc.fill = java.awt.GridBagConstraints.BOTH;
                jp.add(sep, gbc);
                 i++;

                gbc = new GridBagConstraints();
                gbc.gridx = 0;
                gbc.gridy = i;
                gbc.gridwidth = 3;
                gbc.fill = java.awt.GridBagConstraints.BOTH;
                JCheckBox jcb = new JCheckBox();
                jp.remove(jcb);
                jcb.setName(rs.getInt("id"));
                jcb.setText(rs.getString("betreff"));
                jcb.addItemListener(stateListener);
                jcb.setBackground(gelb);
                jcb.setSelected(true);
                jcb.setVisible(true);
                jcb.setBounds(2, i*20, 200, 20);
                jp.add(jcb, gbc);
           
                i++;
}

MFG

Sascha
 
Zurück