Checkboxen layouten

Status
Nicht offen für weitere Antworten.
T

Tanja

Gast
Hallo,

ich muss bei mir in einem Gui verschiedene Auswahlmöglihckeiten für den Anwender anbieten, also dachte ich mir ich benutze die Checkboxen, wie bei diesem Beispiel...
JButton1.gif

Nun habe ich aber so um die 100 Checkboxen....die ich verwendet....wie kann ich die am Besten Layouten, damit es auch schön aussieht....oder gibt es für solche Fälle eine andere Komponente? Danke euch!
 
T

Tanja

Gast
Ja das wäre eine Möglichkeit, ich weiß gerade auch nicht so recht...mich stört es halt wenn ich ungefähr 100 Checkboxen unter bzw. nebeneinander habe....
 

meez

Top Contributor
Ich persönlich, würde die Checkboxen zu logischen Gruppen zusammenfassen, und die Boxen in eine JTable packen...
So kannst du Platz sparen...


EDIT: Mist zu langsam..;)
 
T

Tanja

Gast
Danke das ging aber super schnell, ja das bild war falsch....
JCheckBox1.gif

meinte das hier und werde mich mal an die JTable wagen, sieht optisch am besten aus....mal schauen wie ich das hinbekomme, danke euch schonmal!
 
T

Tanja

Gast
ok aber bin jetzt bei JTabel angekommen....soweit so gut....
jetzt habe ich folgendes problem...aber halt mit vector die dann die spalten und zeilen füllen kann man nicht checkboxen....in eine Zeile adden?
Code:
 Vector rowA = new Vector(); 
           rowA.add("test");
           JCheckBox cb1 = new JCheckBox("",true);
           rowA.add(cb1); 
            data.add(rowA);
bekomme dann immer den Objektname zurück....hat dafür jemand ein tipp?
 
G

Gast

Gast
so wird das glaub ich nix.. guck doch mal in die FAQ (siehe Beni).. du gibst der Spalte mit, dass sie boolean darstellen solln.. du addest da keine CheckBoxen..

so seh ich das
 
R

Roar

Gast
du kannst von mir auch aus CheckBoxen adden, dann musst du nur den renderer anpassen! Benis beispielrenderer prüft halt was das fürn datentyp is und papt jenachdem die kopmonente in die tabelle, das kansnt du natürlich so machen wie du es willst....
 
T

Tanja

Gast
mit dem rendern komme ich gerade nicht so weiter....hast du da mal eben ein Tipp für micht wie ich das mache? So dass eine Spalte nicht mit dem String Wert gefüllt wird sondern bei eine Boolean jeweils....eine ComboBox anzeigt? Danke!!!
 

Sky

Top Contributor
Code:
import javax.swing.table.*;
import javax.swing.*;
import java.awt.*;

public class Cb_Renderer
    implements TableCellRenderer {
  private JCheckBox m_checkBox;

  public Cb_Renderer() {
    m_checkBox = new JCheckBox();
    m_checkBox.setHorizontalAlignment(SwingConstants.CENTER);
  }

  public java.awt.Component getTableCellRendererComponent(
      JTable table, Object value, boolean isSelected,
      boolean hasFocus, int row, int col) {

    m_checkBox.setForeground(isSelected ? Color.red : Color.blue);
    m_checkBox.setBackground(isSelected ? Color.blue : Color.red);

    if (value == null)
      return m_checkBox;

    String sValue = value.toString().trim();

    boolean b = Boolean.getBoolean(sValue);
    m_checkBox.setSelected(b);

    return m_checkBox;
  }
}

EDIT: In meinem Beispiel wird auch ein String gesetzt, welcher "true" oder "false" ist. Angezeigt wird trotzdem die Checkbox. :)
 
B

Beni

Gast
Edit: uups, da war ich zu langsam. Aber sky80, für das muss man nichteinmal einen neuen Renderer schreiben.

Ich hab eines der Beispiele genommen und ein bisschen überflüssigen Quellcode gelöscht. Heraus kommt das:

Code:
import javax.swing.JFrame;
import javax.swing.JScrollPane;

public class Editor{
	   public static void main( String[] args ){
	      // Unser TableModel (siehe unten)
	      Model model = new Model();
	     
	      // Das JTable initialisieren
	      JTable table = new JTable( model );
	     
	      model.addPair( true, "A" );
	      model.addPair( true, "B" );
	      model.addPair( false, "C" );
	      
	      JFrame frame = new JFrame( "Demo" );
	      frame.getContentPane().add( new JScrollPane( table ) );
	     
	      frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
	      frame.pack();
	      frame.setVisible( true );
	   } 
}
Code:
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class Model extends DefaultTableModel{
	public Model(){
		super( new Object[0][2], new String[]{ "Werte", "Einstellung für..." } );
	}
	
	public Class getColumnClass(int columnIndex) {
		if( columnIndex == 0 )
			return Boolean.class;
		else
			return String.class;
	}
	
	public boolean isCellEditable(int row, int column) {
		return column == 0;
	}
	
	public int addPair( boolean value, String text ){
		addRow( new Object[]{ new Boolean(value), text });
		return getRowCount()-1;
	}
	public boolean getValue( int index ){
		return ((Boolean)getValueAt( index, 0 )).booleanValue();
	}
}
 
T

Tanja

Gast
Besten Dank das hilft mir super weiter...habe bestimmt nachher noch ein paar Fragen...ich hoffe ich nerve euhc damit nicht...
 
T

Tanja

Gast
So erstmal zum Verständnis....die Klasse DefaultTableModel ist so eine Art ActionListener und gibt die einzelnen Methoden vor die in der Klasse Model überschrieben werden?

Code:
   public int addPair(String text, boolean value){ 
      addRow( new Object[]{ new Boolean(value), text }); 
      return getRowCount()-1; 
   }

Hier erstelle ich ein neues Object.....für meine Zeile...ich hatte jetzt mal versucht
new Boolean(value) mit der Variable text zu tauschen, dass funktioniert aber leider nicht....
oder geht das net....

Besten dank euch!!
 
B

Beni

Gast
Mit vertauscht meinst du das hier?
addRow( new Object[]{ text, new Boolean(value) })

Nun, in all den anderen Methoden wird davon ausgegangen, dass der Boolean in der 1. Spalte, der Text in der 2. Spalte steht. Also musst du in den anderen Methoden Indices vertauschen.
 

McSnoop

Bekanntes Mitglied
Beni hat gesagt.:
Code:
	public Class getColumnClass(int columnIndex) {
		if( columnIndex == 0 )
			return Boolean.class;
		else
			return String.class;
	}
	
}

warum klappt das ????

bei meinem Model kommt da immer ne Fehlermeldung

"
Multiple markers at this Line
- This method must return a result of type Class
- overrides javax.swing.table.AbstractTabelModel.getColumnClass
"

Im grunde habe ich aber nichts anders gemacht.
 

McSnoop

Bekanntes Mitglied
was ist denn???

Boolean.class

das ist doch vom typ class oder irre ich mich da

wenn ich schreibe:

Code:
return getClass();

dann klappts aber dann castet er mir alle spalten nach String und das ist mist.

ich will eigentlich das alle spalten so erhaltn bleiben er halt jede Spalte einen Extra typ hat, Double, Integer, Boolean oder String.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
U JavaFX CheckBoxen in GUI verschieben AWT, Swing, JavaFX & SWT 20
D JavaFX Dynamisch erzeugte Checkboxen aus VBox auslesen AWT, Swing, JavaFX & SWT 3
D Java Swing, Label lässt sich nicht mit Checkboxen/Knopf verändern AWT, Swing, JavaFX & SWT 2
T Dynamisch mehrere Checkboxen anlegen AWT, Swing, JavaFX & SWT 2
D Seltsames Verhalten meiner CheckBoxen AWT, Swing, JavaFX & SWT 7
S Swing Checkboxen in Einträgen des Typs DefaultMutableTreeNode AWT, Swing, JavaFX & SWT 23
M Swing CheckBoxen werden nicht in jTable angezeigt AWT, Swing, JavaFX & SWT 3
S AWT Erstellen von Checkboxen AWT, Swing, JavaFX & SWT 33
M Checkboxen Namen setzten über Parameter => Abfragen? AWT, Swing, JavaFX & SWT 2
F checkboxen auslesen/ansprechen AWT, Swing, JavaFX & SWT 1
X Checkboxen erstellt mit MouseClicked event AWT, Swing, JavaFX & SWT 10
J Hintergrundfarbe von CheckBoxen in einer JTable AWT, Swing, JavaFX & SWT 4
T JTree mit Checkboxen anpassen AWT, Swing, JavaFX & SWT 7
R Checkboxen - Event mit Controller abfangen AWT, Swing, JavaFX & SWT 7
S swt table mit checkboxen: wie nachträglich im code setzen? AWT, Swing, JavaFX & SWT 6
D Mehrere CheckBoxen im TableModel wechselseitig ausschließen AWT, Swing, JavaFX & SWT 5
G Namen mehrer Checkboxen abfragen AWT, Swing, JavaFX & SWT 7
F Checkboxen in JTable abfragen AWT, Swing, JavaFX & SWT 2
M@rk Jtree Checkboxen AWT, Swing, JavaFX & SWT 2
G JTree mit Checkboxen und Problem mit isSelected() AWT, Swing, JavaFX & SWT 2
G Aktionen bei Checkboxen AWT, Swing, JavaFX & SWT 2
R Checkboxen plazieren AWT, Swing, JavaFX & SWT 3
M JList mit checkboxen AWT, Swing, JavaFX & SWT 2
O Dynamische Checkboxen AWT, Swing, JavaFX & SWT 21
TheJavaKid .isSelected() bei AWT Checkboxen? AWT, Swing, JavaFX & SWT 2
F Checkboxen eines anderen Panels ansprechen AWT, Swing, JavaFX & SWT 3
C Checkboxen bzw. CheckboxGroup AWT, Swing, JavaFX & SWT 3
S GridBagLayout "links-rechts-layouten" AWT, Swing, JavaFX & SWT 7
M LayoutManager Erst layouten, dann zeichnen AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben