JSpinner in einer JTable?

Status
Nicht offen für weitere Antworten.

matzze2000

Aktives Mitglied
Hallo,

ist es möglich einen JSpinner (oder beliebige andere GUI Klassen) in einer Tabelle zu verwenden? Ich wollte so ne Art Liste machen. Die erste und zweite Spalte der Tabelle sollte aus nem String bestehen und die letzte aus einem JSpinner in dem ich dann die Anzahl einstellen kann. Ich habe es so versucht:

Code:
//Erzeugt ein Object das dann in der Tabelle verwendet wird

javax.swing.JSpinner spinner = new javax.swing.JSpinner(new javax.swing.SpinnerNumberModel(10, 0, 100, 1));
		Object[][] data = new Object[][] { 
				   {"Neu", "Neues Dokument anlegen", spinner}, 
				   {"öffnen", "Vorhandenes Dokument öffnen", spinner}, 
				   {"Speichern", "Speichern des Dokumentes", spinner} 
				 };

Wenn die Tabelle dann erstellt wird steht in der Zelle in die der Spinner sollte
javax.swing.JSpinner[,0,0,0x0,invalid,layout=javax.swing.plaf.basic.BasicSpinnerUI$Handler,
alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIRe
source@53c015,flags=16777544,maximumSize=,minimumSize=,preferredSize=]

[Edit by Beni: ein paar \n\r eingefügt zwecks Platzmanagement]
 

GRudiD

Aktives Mitglied
Ohne mich viel damit auseinandergesetzt zu haben, würde ich sagen, dass du dir einen CellRenderer (und später auch einen CellEditor) schreiben musst. Siehe dir dazu einfach mal in den FAQs das JTable Tutorial an. Speziell Kapitel 4.
JTable und alles was damit zusammenhängt ist relativ komplex und nicht einfach zu verstehen. Also mach dir vorher ne Kanne Kaffee :)
 

matzze2000

Aktives Mitglied
Hmm, also nachdem ich mich mit der JTable jetz schon ein bissel auseinander gesetzt habe und auch das ein oder andere Problem lösen konnte habe ich immer noch nicht so richtig ne Idee wie ich jetzt das mit den Spinnern in der Zeile lösen kann. Was ich gelesen habe ist, dass ich wohl für Tabellenfelder mit Integerwerten einen TableCellRenderer anlegen muss und in ihm definiere was denn nun genau gemacht werden soll wenn eine Integerzahl in einer Zelle steht. In dem Beispiel in dem Tutorial wurde das ja auch für einen Farbwert gemacht. Aber dort wurde ja nur Textfarbe und sowas geändert. So sieht der TableCellRenderer dort aus:

Code:
class ColorTableCellRenderer extends DefaultTableCellRenderer{ 
   public Component getTableCellRendererComponent(JTable table, Object value, 
         boolean isSelected, boolean hasFocus, int row, int column) { 
      super.getTableCellRendererComponent(table, value, isSelected, 
            hasFocus, row, column); 
       
      Color color = (Color)value; 
       
      setText( color.getRed() + ", " + color.getBlue() + ", " + color.getGreen() ); 
      setForeground( color ); 
       
      return this; 
   } 
}

Ich nehme an da muss was in der Art stehen, dass der Object-Wert in einen Integer umgewandelt werden muss und dann muss ich da irgendwie ein JSpinner rein schreiben... Oder geht das so garnich?[/code]
 

GRudiD

Aktives Mitglied
Genau. Die Methode, die zum Zeichnen einer Zelle aufgerufen wird lautet doch:
Code:
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
...
}

Diese gibt ein Component zurück. Im Standartrenderer ist das ein JLabel, bei dem du wie im Tut die Farbe etc. ändern kannst. Du willst ein statt dem JLabel ein JSpinner, also musst du dir vorher einen erstellen und diesen dann zurückgeben.

Code:
/* nur als Beispiel
 * du solltest allerdings nicht den DefaultTableCellRenderer nehmen (der erbt bereits von JLabel, was du ja nicht brauchst)  
 * sondern dir eine eigene Klasse schreiben, die TableCellRenderer implementiert
 */
		meinJTable.setDefaultRenderer(Integer.class, new DefaultTableCellRenderer() {
			JSpinner spinner = new JSpinner();
			
			public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
				super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
				this.spinner.setValue((Integer) value);

				return this.spinner;
			}
		});

Analog dazu sollte es auch mit dem CellEditor funktionieren.

PS: Der Wert, der in value übergeben wird, ist der Wert aus deinem TableModel.getValueAt(..). Du musst diesen Wert also nicht umwandeln sondern nur entsprechend casten.
 

matzze2000

Aktives Mitglied
Also im Prinzip funktioniert die Tabelle jetz so wie sie soll. Im Integerfeld wird ein Spinner dargestellt. Ich habe nur noch das eine Problem, dass nicht sofort alles in der Tabelle neu berechnet wird wenn ich einen anderen Wert einstelle. Das wird daran liegen, dass ich folgende Funktion im TableCellEditor nicht implementiert habe:

Code:
public TestEditor(){ 
        // Der Editor hört sich selbst ab, so kann er auf jede Benutzereingabe reagieren 
        getDocument().addDocumentListener( this ); 
    }

Im Beispiel kann man das ja einfach so machen, denn die Klasse TestEditor extends JTextField. Mein IntegerEditor extends aber JSpinner der die verwendeten Methoden (getDocument()) nicht besitzt. Ich weiß aber nicht so wirklich, was ich statt dessen da für nen Listener rein scheiben kann, damit immer wenn jemand die Anzahl im Spinner verändert auch ein Ereignis gesendet wird.
 

matzze2000

Aktives Mitglied
Und ich hab noch ein Problem. Damit keine Negativen Werte eingegeben werden können habe ich noch das SpinnerNumberModel geändert:

Code:
class IntegerTableCellRenderer extends DefaultTableCellRenderer{ 
	   
	JSpinner spinner = new JSpinner(new SpinnerNumberModel( 0, 0, 1000, 1 ));
	
	public Component getTableCellRendererComponent(JTable table, Object value, 
	         boolean isSelected, boolean hasFocus, int row, int column) { 
	      super.getTableCellRendererComponent(table, value, isSelected, 
	            hasFocus, row, column); 
	       
	      this.spinner.setValue((Integer) value);
	      return this.spinner;
	   } 
	}

Nur leider hat das irgendwie keine Auswirkungen. Im Spinner kann ich trotzdem weiterhin fröhlich negative Zahlen einstellen :-\
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D TAB Taste innerhalb eines JSpinner AWT, Swing, JavaFX & SWT 2
C JSpinner AWT, Swing, JavaFX & SWT 6
C Hilfe bei JSpinner und JList AWT, Swing, JavaFX & SWT 1
K Swing JSpinner mit NULL AWT, Swing, JavaFX & SWT 3
V LookAndFeel JSpinner Hintergrund Farbe mit Nimbus LaF AWT, Swing, JavaFX & SWT 0
R Int aus JSpinner auslesen und Tabelle erstellen AWT, Swing, JavaFX & SWT 3
K JSpinner in passender Breite erstellen oder automatisch anpassen AWT, Swing, JavaFX & SWT 2
D JCheckbox und JSpinner in JTable AWT, Swing, JavaFX & SWT 9
M JSpinner, setValue AWT, Swing, JavaFX & SWT 7
N Swing JSpinner mit Datum aber ohne Uhrzeit AWT, Swing, JavaFX & SWT 2
J Swing JSpinner mit zusätzlichem Text? AWT, Swing, JavaFX & SWT 2
B JSpinner ChangeEvent erzwingen AWT, Swing, JavaFX & SWT 6
B JSpinner Textgröße anpassen AWT, Swing, JavaFX & SWT 2
B JSpinner welche Taste? AWT, Swing, JavaFX & SWT 5
B JSpinner Enter AWT, Swing, JavaFX & SWT 7
G JSpinner ohne Tausendertrennzeichen AWT, Swing, JavaFX & SWT 5
N Wertanzeige mittels JSpinner AWT, Swing, JavaFX & SWT 3
S JSpinner AWT, Swing, JavaFX & SWT 11
G Swing JSpinner nur mit Buttons ändern AWT, Swing, JavaFX & SWT 8
T JSpinner in JTable: Problem beim Auslesen, funktioniert erst beim Zellwechsel AWT, Swing, JavaFX & SWT 7
T Swing JSpinner in JTable AWT, Swing, JavaFX & SWT 9
C Größe von JSpinner fixieren AWT, Swing, JavaFX & SWT 4
J JSpinner + SpinnerNumberModel int auslesen AWT, Swing, JavaFX & SWT 2
C Zwei JSpinner mit dem gleichen Wert AWT, Swing, JavaFX & SWT 2
Eldorado Swing Popup-Menü mit Jspinner AWT, Swing, JavaFX & SWT 4
X Den Wert von JSpinner setzen ohne Event AWT, Swing, JavaFX & SWT 3
M JSpinner als TableCellEditor; buttons nur bei fokus sichtbar AWT, Swing, JavaFX & SWT 14
M JSpinner Font ändern AWT, Swing, JavaFX & SWT 4
Spin JSpinner AWT, Swing, JavaFX & SWT 10
T JSpinner, 3 JSpinner aber nur ein SpinnerDateModel AWT, Swing, JavaFX & SWT 7
S JSpinner der Floats anzeigt..? AWT, Swing, JavaFX & SWT 4
D Swing Eigene Komponente mit JSpinner AWT, Swing, JavaFX & SWT 4
elitebiber Swing JSpinner und die Zeit AWT, Swing, JavaFX & SWT 11
T JSpinner Problem AWT, Swing, JavaFX & SWT 6
G JSpinner umdrehen? AWT, Swing, JavaFX & SWT 2
G JSpinner und ChangeListener AWT, Swing, JavaFX & SWT 3
K JSpinner - Model <-> View, unterschiedliche Werte AWT, Swing, JavaFX & SWT 9
Tom299 JSpinner nur Zeitangabe AWT, Swing, JavaFX & SWT 13
G JSpinner Frage AWT, Swing, JavaFX & SWT 2
H JSpinner mit Kalenderwoche und Jahr AWT, Swing, JavaFX & SWT 6
P Frage zu JSpinner AWT, Swing, JavaFX & SWT 3
B JTextFiled, JCheckBox, JSpinner Eigenschaften speichern AWT, Swing, JavaFX & SWT 2
R Konvertieren von Werten im JSpinner AWT, Swing, JavaFX & SWT 2
K JSpinner Werte verschwinden bei Panel Wechsel AWT, Swing, JavaFX & SWT 2
B JSpinner passt optisch nicht zu anderen Komponenten AWT, Swing, JavaFX & SWT 2
D JSpinner ohne Edit Möglichkeit AWT, Swing, JavaFX & SWT 5
J JSpinner mit zahlen AWT, Swing, JavaFX & SWT 10
P JSpinner Objekt anstatt Zahlen sollen man Namen auswählen AWT, Swing, JavaFX & SWT 2
L JSpinner + addRow() AWT, Swing, JavaFX & SWT 3
M .txt unter Verwendung von JSpinner in Textfeld schreiben AWT, Swing, JavaFX & SWT 4
N JDK1.4- Überladen d. Methoden getValue setValue von JSpinner AWT, Swing, JavaFX & SWT 2
S JSpinner: Editieren einschränken AWT, Swing, JavaFX & SWT 4
F JSpinner FocusListener AWT, Swing, JavaFX & SWT 2
W JSpinner: Button vertikal anordnen AWT, Swing, JavaFX & SWT 2
R JSpinner rotieren AWT, Swing, JavaFX & SWT 6
A JSpinner in Dialogbox integrieren? AWT, Swing, JavaFX & SWT 3
D JSPinner Größe verändern - setSize() funktioniert nicht AWT, Swing, JavaFX & SWT 7
javasdann JSpinner & KeyListener. AWT, Swing, JavaFX & SWT 8
G jspinner schrittweite in Abhängigkeit vom aktuellen Wert AWT, Swing, JavaFX & SWT 3
G JSpinner bringt bei anklicken eine CastException AWT, Swing, JavaFX & SWT 5
flashfactor Un mal ein Problem mit JSpinner AWT, Swing, JavaFX & SWT 7
I jSpinner.getValue() AWT, Swing, JavaFX & SWT 2
G JSpinner für Datumsanzeige AWT, Swing, JavaFX & SWT 2
MiMa Optimieren einer Methode zum Zentrieren von Fenstern AWT, Swing, JavaFX & SWT 0
T VerifyListener - Ersetzen einer 0 AWT, Swing, JavaFX & SWT 5
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
N Dropshadow setzen bei einer Gruppe von Tiles, die sich jeweils in einer Stackpane befinden, welche in einer Gridpane angeordnet sind. AWT, Swing, JavaFX & SWT 0
M Daten zufällig Einlesen aus einer Datei (binäres Format) AWT, Swing, JavaFX & SWT 7
ExceptionOfExpectation Mit einer laufenden GUI Applikation eine Datei in dem Rechner löschen AWT, Swing, JavaFX & SWT 2
Jose05 Aus einer normalen Java Klasse eine FXML-Klasse laden AWT, Swing, JavaFX & SWT 12
Linjutsu Den Inhalten aus einer ArrayList Bilder zuweisen (Kartenspiel) AWT, Swing, JavaFX & SWT 8
H JavaFX Timeline II: Verschieben einer ImageView AWT, Swing, JavaFX & SWT 16
I Hilfe bei dem Erstellen einer SQL Abfrage aus gewählten JComboBoxen AWT, Swing, JavaFX & SWT 5
L Swing TextPanel Schrift untereinander und auf einer Höhe AWT, Swing, JavaFX & SWT 3
mananana Mögliche probleme die in einer GUI passieren Können AWT, Swing, JavaFX & SWT 6
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
Ernesto95 JavaFX Return Value nach Beendigung einer Animation AWT, Swing, JavaFX & SWT 15
melaniemueller Wortliste in einer Datei ablegen AWT, Swing, JavaFX & SWT 12
D Layout einer scene mit ListView Elementen und Zwei Textfeldern AWT, Swing, JavaFX & SWT 1
Jose05 JavaFx Fxml: GUI aus einer anderen Klasse starten AWT, Swing, JavaFX & SWT 1
U Was genau ist das Objekt einer affinentransformation? AWT, Swing, JavaFX & SWT 1
B JavaFX Prüfen ob ein Objekt sich mehrmals in einer Liste befindet AWT, Swing, JavaFX & SWT 5
mac2010 JavaFX Einbindung einer Karte AWT, Swing, JavaFX & SWT 1
donnico2 Objekte in der GUI ausgeben mit Hilfe einer DAO AWT, Swing, JavaFX & SWT 1
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
W Aufrufen einer bestimmten Scene mit if-Bedingung AWT, Swing, JavaFX & SWT 4
J Ablaufsteuerung/Anleitung machen mit JDialog und einer Zustandsmaschine AWT, Swing, JavaFX & SWT 1
missy72 JavaFX Wiederholen einer IF-Abfrage beim erneuten Öffnen einer Stage AWT, Swing, JavaFX & SWT 11
missy72 JavaFX TableView / TableColumn / ObservableList / zwei Werte in einer Zelle AWT, Swing, JavaFX & SWT 2
S JavaFX - mit Listener Veränderungen in einer TableView abhören AWT, Swing, JavaFX & SWT 3
missy72 JavaFX ObservableList in einer ArrayList speichern. AWT, Swing, JavaFX & SWT 7
HoT Sortieren von ein paar Zeilen in einer Tabelle, aber nicht die ganze Tabelle AWT, Swing, JavaFX & SWT 3
kodela Swing Element einer JComboBox ausgrauen AWT, Swing, JavaFX & SWT 3
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
N Einer TextArea ein ScrollPane hinzufügen AWT, Swing, JavaFX & SWT 8
L JavaFX Exception nach includieren einer fxml // nested controller AWT, Swing, JavaFX & SWT 1
K Probleme bei der Erstellung und Ausführung einer Jar Datei AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben