Swing JTable + ImageIcons + JRadioButtons

Joggal

Aktives Mitglied
Hallo liebe Java Fans 😀

Ich habe ein Problem mit dem erstellen einer JTable, wobei ich in die erste Zeile Bilder und in die zweite Zeile JRadioButtons plazieren möchte.

Das Problem ist folgendes:
Ich habe schon überall gesucht und auch ein paar Tutorials gefunden, jedoch nur im Zusammenhang mit Spalten, sprich, dass die JRadioButtons untereinander in Spalten sind, und nicht wie ich es benötige, nebeneinander in einer Zeile.



Ich schaffe es zwar, dass die RadioButtons und die Grafiken angezeigt werden, aber wenn ich dann auf eine Zelle klicke dann wird bspw. nicht der Radiobutton ausgewählt, sondern dieser verschwindet dann und man sieht nur noch einen langen Text des Objekts.

Kann mir hier vielleicht jemand weiterhelfen?
lg, Jörg

PS: Hier sieht man, wie ich mir das vorstelle:


Das Problem dabei: Wenn ich darauf klicke dann passiert folgendes: Die Zelle wird weiß bzw. man sieht nur den Text.

 
wir brauchen bei deinem problem den quellcode um dir zu helfen ;-)

Hallo 🙂

Tut mir leid, da hast du natürlich recht 😀

Hier ist der Code:

Hier erstelle ich die Tabelle, und befülle sie dann mit Schleifen (jeweils eine für die Bilder und eine für die RadioButtons), danach setze ich einen Renderer und das TableModel
Code:
JTable table = view.getTable_1();
		ImageIcon[] icons = new ImageIcon[15];
		JLabel[] labels = new JLabel[15];
		
		Object[][] objects = new Object[][] {
			{null, null, null, null, null, null, null, null, null, null, null, null, null, null, null},
			{null, null, null, null, null, null, null, null, null, null, null, null, null, null, null},
			{null, null, null, null, null, null, null, null, null, null, null, null, null, null, null},
		};
		
		String[] strings = new String[] {
			"New column", "New column", "New column", "New column", "New column", "New column", "New column", "New column", "New column", "New column", "New column", "New column", "New column", "New column", "New column"
		};

		
		for(int i = 1; i <= 15; i++){

			icons[i-1] = new ImageIcon("picsDiamantKarat/"+i+".gif");
			objects[0][i-1] = icons[i-1];

		}
		ButtonGroup group = new ButtonGroup();
		
		JRadioButton[] rButtons = new JRadioButton[15];
		
		for(int i = 1; i <= 15; i++){

			rButtons[i-1] = new JRadioButton();
			objects[1][i-1] = rButtons[i-1];
			group.add(rButtons[i-1]);
			
			
		}

		
		DefaultTableModel dataModel = new DefaultTableModel(objects,strings);
		table.setDefaultRenderer(Object.class, new MyRenderer());
		table.setRowHeight(40);
		
		table.setModel(dataModel);

Hier ist der Renderer, indem ich dann auf RadioButtons bzw. Bilder abfrage und diese dann so wieder zurück gebe:

Code:
public class MyRenderer extends DefaultTableCellRenderer {

		public MyRenderer() {
			// TODO Auto-generated constructor stub
			 setHorizontalAlignment(CENTER);
		}
		
		  /*
		   * @see TableCellRenderer#getTableCellRendererComponent(JTable, Object, boolean, boolean, int, int)
		   */
		  public Component getTableCellRendererComponent(JTable table, Object value,
		                                                 boolean isSelected, boolean hasFocus, 
		                                                 int row, int column) {

			 
			if(value instanceof ImageIcon){
//				setHorizontalAlignment(CENTER);
				setIcon((ImageIcon) value);
				return this;
			}
			if(value instanceof JRadioButton){
				setHorizontalAlignment(CENTER);
				
			    return (JRadioButton)value;
			}
			else{
				return null;
			}
			
		  }
		  
		}

Ich weiß, es ist nicht sehr sauber programmiert, aber ich ich hab da schon ziemlich viel dran rumgebastelt und vergeblichst versucht es hinzubekommen 🙁

lg Jörgi
 
Hi Leute,

Da anscheinend keiner eine Idee hat das Ganze umzusetzen, versuche ich die Bilder und RadioButtons mit JLabels zu plazieren.

Allerdings habe ich noch nicht rausgefunden, wie man bei allen Bildern (die unterschiedlich groß sind) einen gleichgroßen Rahmen (Border) setzen kann. Ich hab versucht mit setSize das ganze auszugleichen, allerdings verändert sich die größe des JLabels nicht ... (habe für jedes Bild ein eigenes JLabel gemacht und alle danach einem JPanel hinzugefügt)

Hoffe auf eine Antwort!

lg
 

Neue Themen


Zurück
Oben