Ist das möglich (JTable)

Status
Nicht offen für weitere Antworten.

IceTi

Bekanntes Mitglied
Hallo,

ich habe da mal eine Frage und zwar möchte ich wissen ob folgendes möglich wäre:

Also, ich habe eine Tabelle (JTable) und darunter verschiedenen Symbole, welche man wie ein Checkbox auswählen kann. Wähle ich nun z.B. Symbol 1, möchte ich, wenn ich auf eine bestimmte Zelle in der JTable klicke, dass dort dieses Symbol erscheint. Wähle ich dann kein anderes Symbol und klicke noch auf einen andere Zelle so erscheint das Symbol dort auch. Ich denke das Prinzip ist klar, oder?

Bei klick auf eine beliebige Zelle soll also ein bestimmte Symbol bzw. eine Grafik erscheinen, ohne eine ComboBox oder dergleichen.

Wie kann ich so etwas realisieren ?
 

André Uhres

Top Contributor
Code:
ListSelectionListener selectionListener = new ListSelectionListener() {
    public void valueChanged(final ListSelectionEvent e) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                int row = table.getSelectedRow();
                int column = table.getSelectedColumn();
                table.setValueAt(getCurrentValue(), row, column);
            }
        });
    }
};
table.getSelectionModel().addListSelectionListener(selectionListener);
table.getColumnModel().getSelectionModel().addListSelectionListener(selectionListener);
 

IceTi

Bekanntes Mitglied
In der Zeile:

Code:
table.setValueAt(getCurrentValue(), row, column);

Erhalte ich nun:

Code:
The method getCurrentValue() is undefined for the type new Runnable(){}


Habe dann für gerCurrentValue() mal meinen CellRenderer eingesetzt aber da passiert dann nichts, also so:

Code:
table.setValueAt(new Renderer(), row, column);


Hier der Renderer:

Code:
import java.awt.Component;
import javax.swing.ImageIcon;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;


public class Renderer extends DefaultTableCellRenderer{

	private static final long serialVersionUID = 1L;

	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
		ImageIcon icon = new ImageIcon(Main.class.getResource("/img/grade.jpg"));
		setText((String)value);
		setIcon(icon);
		return this;
	}
}


Was mache ich da nun falsch ?
 

IceTi

Bekanntes Mitglied
Was muss da denn sonst hin oder wie löse ich das Problem ich denke mal es ist nur noch eine Kleinigkeit oder?
 

IceTi

Bekanntes Mitglied
Wenn ich das so mache, passiert da auch nichts.

Hier mal ein Teil meines Codes:


Code:
public Class Main{

    TableModel model = new AbstractTableModel(){
		public Object getValueAt(int rowIndex, int columnIndex){
			return null;
		}
		public int getColumnCount(){
			return 20;
		}
		public int getRowCount(){
			return 19;
		}
	};


    public void init() {
    	
		final JTable table = new JTable(model);
		//table.getColumnModel().getColumn(1).setCellRenderer(new Renderer());
		table.setGridColor(Color.black);
		table.setBounds(10, 38, 620, 304);
		table.setColumnSelectionAllowed(false);
		table.setRowSelectionAllowed(false);

		ListSelectionListener selectionListener = new ListSelectionListener() {
		    public void valueChanged(final ListSelectionEvent e) {
		        SwingUtilities.invokeLater(new Runnable() {
		            public void run() {
		                int row = table.getSelectedRow();
		                int column = table.getSelectedColumn();
		                table.setValueAt("mein Text", row, column);
		            }
		        });
		    }
		};
		table.getSelectionModel().addListSelectionListener(selectionListener);
		table.getColumnModel().getSelectionModel().addListSelectionListener(selectionListener);



               panel1.add(table);

[...]

}
 

IceTi

Bekanntes Mitglied
Danke,

nun erhaltet ich:

Code:
Renderer[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.EmptyBorder@109ea96,flags=25165832,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,horizontalAlignment=LEADING,horizontalTextPosition=TRAILING,iconTextGap=4,labelFor=,text=,verticalAlignment=CENTER,verticalTextPosition=CENTER]

Wenn ich auf eine Zelle klicke und es so lasse:
Code:
		ListSelectionListener selectionListener = new ListSelectionListener() {
		    public void valueChanged(final ListSelectionEvent e) {
		        SwingUtilities.invokeLater(new Runnable() {
		            public void run() {
		                int row = table.getSelectedRow();
		                int column = table.getSelectedColumn();
		                table.setValueAt(rd = new Renderer(), row, column);
		            }
		        });
		    }
		};

"Hallo" schreibt er mir nun in eine Zelle aber ich möchte da dann ja ein Bild/eine Graik haben ... hmmm

EDIT:
Bekomme es einfach nicht hin. Kann doch jetzt nicht mehr so schwer sein oder ?
 

André Uhres

Top Contributor
In setValueAt gibst du den Wert an, der in der Zelle erscheinen soll, nicht den Renderer.
Der Renderer kümmert sich dann darum, den Wert so darzustellen, wie du es willst.
 

IceTi

Bekanntes Mitglied
Hmmm ok. Kappiert.
Also könnte ich dem Renderer sagen, wenn dort "12" drin steht dann packe die und die Grafik in die Zelle ??

Doch wie mache ich diese Sachen nun ?

Wäre super NEtt würdest du mir das noch kurz erklären, dann habe ich es ja :)


EDIT:
Habs nun mal so probiert:
Code:
    Renderer ren = new Renderer(); 
table.setDefaultRenderer(Object.class, ren);

public class Renderer extends DefaultTableCellRenderer{

	private static final long serialVersionUID = 1L;

	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
		ImageIcon icon = new ImageIcon(Main.class.getResource("/img/kurve2.jpg"));
		
		if(value != null && value.equals("Test")){
			setText((String)value);
			setIcon(icon);
		}
		return this;
	}
}

Da macht er mir aber direkt ganze Zeilen mit dem ICon und beim 2. Klick die Ganze Tabelle. Wie kann ich das also auf eine Zelle begrenzen oder wo liegt der Fehler ?
 

André Uhres

Top Contributor
Du musst dem Renderer auch sagen, was er darstellen soll, wenn die angegebene Bedingung
nicht erfüllt ist. Übrigens sollte man Bilder besser ausserhalb der callback Methode laden.
Andernfalls geht unnötig Rechenzeit mit dem Bildladen verloren,
jedesmal wenn Zellen neu dargestellt werden müssen.
 

IceTi

Bekanntes Mitglied
Jipiii, so funzt das...

Code:
public class Renderer extends DefaultTableCellRenderer{

	private static final long serialVersionUID = 1L;
	ImageIcon icon = new ImageIcon(Main.class.getResource("/img/kurve2.jpg"));
	
	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){

		if(value != null && value.equals("Test")){
			setIcon(icon);
		}else{
			setIcon(null);;		
			}
		return this;
	}
}

Ist das so okay? Oder kann man da noch was besser dran machen?
 

IceTi

Bekanntes Mitglied
Das mit den Icons klappt nun Wunderbar, dafür erstmal DANKESCHÖN an André Uhres!!

Nun habe ich leider schon wieder ein Problem.

Nun kann ich ja per klick auf eine Zelle ein Icon/Bild einfügen auf bestimmten Bildern soll es nun später möglich sein draufzuklicken.
Ich habe quasi einen Editor wo man die Bilder platziert und später kann man sich dies nur noch angucken + auf bestimmte Bilder draufklicken, dann soll halt eine bestimmte Aktion ausgeführt werden.

Wie kann ich sowas realisieren?
Vor allem stelle ich mir dir Frage, wie bekomme ich die einzelnen ActionListener für die Bilder/Buttons hin?

Wie mache ich das nun?
Bin für jede Hilfe dankbar...
 

André Uhres

Top Contributor
IceTi hat gesagt.:
später kann man sich dies nur noch angucken + auf bestimmte Bilder draufklicken,
dann soll halt eine bestimmte Aktion ausgeführt werden. Wie kann ich sowas realisieren?
Wieso machst du das nicht einfach auch im selectionListener? Du könntest es mit einem boolean "angucken" steuern.
Bei !angucken setzt du ein neues Bild, bei angucken führst du die "bestimmte" Aktion aus.
 

IceTi

Bekanntes Mitglied
Hmm so richtig habe ich das noch nicht verstanden, vielleicht kannst du mir das nochmal genauer erklären.

Ich setze also wieder einen selectionListener auf die Table, doch wie setze ich diesen nun nur auf bestimmte Zellen? Wenn ich auf eine Zelle (welche anklickbar sein soll) klicke, soll sich das Bild ändern und Variable gesetzt werden (Um genauer zu sein soll etwas über eine SocketVerbindung geschickt werden, aber das sollte ja egal sein, was da gemacht wird)... Diese "besonderen" Felder heissen auf jeden Fall anders als die "starren Zellen"...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26
G JTable: Auf Tasten reagieren möglich? AWT, Swing, JavaFX & SWT 2
G JavaFX Wert aus DB lesen, wenn erfolgreich automatisch eine fxml laden, möglich? AWT, Swing, JavaFX & SWT 2
G JavaFX Scene ausdrucken nicht möglich, Seite leer AWT, Swing, JavaFX & SWT 5
ZH1896ZH MineSweeper Projekt: Testen nicht möglich AWT, Swing, JavaFX & SWT 6
L JavaFX WebView Erstellung nicht möglich AWT, Swing, JavaFX & SWT 4
G JavaFX - Während AudioRecording keine Text eingabe TextField möglich AWT, Swing, JavaFX & SWT 6
A Swing CardLayout - kein Wechsel möglich AWT, Swing, JavaFX & SWT 5
B Java FX FX installieren nicht möglich (Juno) AWT, Swing, JavaFX & SWT 4
C JavaFx TabelView - hintergrundfarbe möglich? AWT, Swing, JavaFX & SWT 1
A JFace Wizard: Ist es möglich eine Page zu löschen? AWT, Swing, JavaFX & SWT 2
P Swing Klick in Tabelle nicht möglich AWT, Swing, JavaFX & SWT 0
S 2D-Grafik JavaScript Visualisierung in Swing, ist das möglich? AWT, Swing, JavaFX & SWT 5
K Viele Textfield mit Hilfe eines MousListener leeren - möglich? AWT, Swing, JavaFX & SWT 8
M JFrame + JNA/aero modul - GUI Elemente so möglich? AWT, Swing, JavaFX & SWT 28
N Swing Netbeans 7.1 keine DesktopApplication mehr möglich ? AWT, Swing, JavaFX & SWT 15
S SWT Anzeigen einer lokalen HTML-Seite im Browser Widget über RAP nicht möglich AWT, Swing, JavaFX & SWT 3
A SWT DateTime Calendar - Nur ab Datum xy selektierbar möglich? AWT, Swing, JavaFX & SWT 2
M verschieben der Objekte in JPanel nur stückchenweise möglich AWT, Swing, JavaFX & SWT 14
M JFileChooser Abfangen des DateiTypen möglich?? AWT, Swing, JavaFX & SWT 5
T JFileChooser - "Öffnen-Button" aktivieren/deaktivieren möglich??? AWT, Swing, JavaFX & SWT 2
X Einem JFrame einen Dialog als Parent setzen. Möglich? AWT, Swing, JavaFX & SWT 4
bluerob Nach RowSorter -> Keine Tabellenüberschreibung möglich AWT, Swing, JavaFX & SWT 7
B 2D-Grafik BBCode möglich? AWT, Swing, JavaFX & SWT 2
C keine weiteren Events während Drag&Drop Operation möglich? AWT, Swing, JavaFX & SWT 5
Fu3L Keine Transparenten JTextComponents möglich mit Nimbus L&F? AWT, Swing, JavaFX & SWT 5
S Würfelnetz in Java ausgeben möglich? AWT, Swing, JavaFX & SWT 4
jeppi Fonts: Schriftgrößen skalierbarer Fonts wirklich nur als integer möglich? AWT, Swing, JavaFX & SWT 5
philipp Ändern des Inhalts eines Containers nicht möglich AWT, Swing, JavaFX & SWT 2
X Swing JList -> Daten anders darstellen als im Model hinterlegt -> möglich ? AWT, Swing, JavaFX & SWT 9
H Swing Ist das hier möglich? AWT, Swing, JavaFX & SWT 13
B Keine Änderungen an JLabel durch Array möglich AWT, Swing, JavaFX & SWT 12
hdi Observer-Pattern bei JPanel nicht möglich? AWT, Swing, JavaFX & SWT 7
0 JMenuItem nicht in zwei JMenus möglich? AWT, Swing, JavaFX & SWT 2
S definierte Größe von contentPane / JPanel möglich? AWT, Swing, JavaFX & SWT 4
I In JFrame zeichnen möglich? AWT, Swing, JavaFX & SWT 3
M GridLayout mit fester Größe möglich? AWT, Swing, JavaFX & SWT 3
G JList hover möglich? AWT, Swing, JavaFX & SWT 2
D Robot: Screenshot vom Desktop Hintergrund möglich ? AWT, Swing, JavaFX & SWT 3
A Tabbed Pane ohne Tabs? - möglich? AWT, Swing, JavaFX & SWT 4
V JTextField - Mehrfachselektion und Eingabe möglich? AWT, Swing, JavaFX & SWT 2
C Umlaute mal möglich, mal nicht AWT, Swing, JavaFX & SWT 2
raptorrs J2D paintComponent: Nur ganzzahlige (-int) Werte möglich? AWT, Swing, JavaFX & SWT 3
J Taskleisten-Eintrag: Ohne JDialog || JFrame möglich ? AWT, Swing, JavaFX & SWT 5
B Setzen von Position > 90 bei JScrollbar nicht möglich AWT, Swing, JavaFX & SWT 3
J "Fading" JDialog möglich? AWT, Swing, JavaFX & SWT 14
G JInternalFrame mit Doppelklick schließen möglich? AWT, Swing, JavaFX & SWT 2
J jTabbedPane ohne Tabs möglich? AWT, Swing, JavaFX & SWT 5
D Ist es möglich ein solches Layout umzusetzen? (bild inside) AWT, Swing, JavaFX & SWT 3
A Hovern möglich? AWT, Swing, JavaFX & SWT 2
P Zeichnen nur von oben links nach unten rechts möglich AWT, Swing, JavaFX & SWT 4
E [KeyListener] unterdrücken möglich? AWT, Swing, JavaFX & SWT 3
D File verschieben. In java möglich? AWT, Swing, JavaFX & SWT 3
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
R Swing JTable und Spaltenausrichtung AWT, Swing, JavaFX & SWT 8
G JTable füllen AWT, Swing, JavaFX & SWT 1
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
J Datensatz in jTable ausgeben AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
M JTable.setDefaultRenderer(...) greift nicht AWT, Swing, JavaFX & SWT 0
J JTable: Eingabe in Tabellenzelle korrigieren AWT, Swing, JavaFX & SWT 4
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
H Swing Jtable extra spalte AWT, Swing, JavaFX & SWT 6
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
N AWT jTable CellRenderer AWT, Swing, JavaFX & SWT 6
T Swing JTable valueChanged datensatz löschen AWT, Swing, JavaFX & SWT 1
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen


Oben