Probleme mit JTable

Schwester

Grünschnabel
Hi,

ich bin kein Profi mit Swing muss allerdings einen GUI mit einer JTable bauen.
Dabei bin auf einiger Probleme gestoßen, die mich langsam in den Wahnsinn treiben. :mad:

Ich verwende ein Scrollpand und darin soll die Table angezeigt werden. Das funktioniert auch soweit, allerdings wird die Tabelle und ihr Inhalt erst angzeigt wenn draufklickt.
Dann werden die Spaltenüberschriften nicht angezeigt obwohl sie im Model definiert sind.
In den Tabellenzeilen hab ich je Zeile 2 Buttons eingefügt, allerdings schaffe ich es nicht, dass von diesen ActionEvents ausgehen und ein neues Fenster geöffnet wird.

Anbei poste ich etwas von meinem Code:

Code:
class MyTableModel extends AbstractTableModel {
						    
						 
						 
						 private String[] columnNames = { "Tag", "von", "bis",  "Pause", 
									"Kat a", "Kat b", "Kat c", "Kat d",
									"Kat e", "Urlaub", "Überstd", "Freigabe" };

						    private Object[][] data;// = generateTableData(getTimesheet());
						 
						    public int getColumnCount() {
						      return columnNames.length;
						    }

						    public int getRowCount() {
						      return data.length;
						    }

						    public String getColumnName(int col) {
						      return columnNames[col];
						    }

						    public Object getValueAt(int row, int col) {
						      return data[row][col];
						    }

						    public Class getColumnClass(int c) {
						      
						    	return getValueAt(0, c).getClass();
						    }

						    
						    public void setValueAt(Object value, int row, int col) {
						
						    data[row][col]=value;	
						    						    	
					 }
					 
					 }
					
					DefaultTableModel tabModel = new DefaultTableModel(generateTableData(getTimesheet()), colNames);
							
					//tabModel.setRowCount(12);
					
					class Editor extends JButton implements TableCellEditor{
						   public Component getTableCellEditorComponent(JTable table, Object value,
						         boolean isSelected, int row, int column) {
						      
							   if(column ==12){
								   setText("Reise");
								   if(isSelected==true){
									   new OpenErfassungReiseAL();
								   }
							   }
							   if(column ==13){
								   setText( "Detail" );   
							   }
						      
						      return this;
						   }
						   
						   public void addCellEditorListener(CellEditorListener l) {
						   }
						   public void cancelCellEditing() {
						   }

						   public Object getCellEditorValue() {
						      return getText();
						   }

						   public boolean isCellEditable(EventObject anEvent) {
						      
							   
							   
							   
							   return true;
						   }

						   public boolean shouldSelectCell(EventObject anEvent) {
						      return true;
						   }

						   public boolean stopCellEditing() {
						      return true;
						   }

						   public void removeCellEditorListener(CellEditorListener l) {
						   
						   }
						} 	
								
					class Renderer extends JButton implements TableCellRenderer{
						   public Component getTableCellRendererComponent(JTable table, Object value,
						         boolean isSelected, boolean hasFocus, int row, int column) {
						      
							   if(column ==12){
								   setText("Reise");
								   							   }
							   if(column ==13){
								   setText( "Detail" );   
							   }
							   
						      
						      return this;
						   } 
					}
					
					
							tab = new JTable(new DefaultTableModel(generateTableData(getTimesheet()), colNames) {
						         public Class getColumnClass(int columnIndex) {
						             
						        	 Class c = String.class;
						        	 switch(columnIndex){
						        	 case 12 : c =JButton.class;
						        	 case 13 : c= JButton.class;
						        	 }
						        	 return c;
						        	 //return columnIndex == 2 ? JButton.class : String.class;
						          } 
							});
						
							
							tab.setDefaultEditor(JButton.class, new Editor());
							tab.setDefaultRenderer(JButton.class, new Renderer());
							
							
							
						tab.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
							
							TableColumnModel tcm =tab.getColumnModel();
							
							tcm.getColumn(0).setPreferredWidth(100);
							tcm.getColumn(0).setHeaderValue("Tag");
							tcm.getColumn(1).setPreferredWidth(100);
							tcm.getColumn(2).setPreferredWidth(100);
							tcm.getColumn(3).setPreferredWidth(50);
							tcm.getColumn(4).setPreferredWidth(50);
							tcm.getColumn(5).setPreferredWidth(50);
							tcm.getColumn(6).setPreferredWidth(50);
							tcm.getColumn(7).setPreferredWidth(50);
							tcm.getColumn(8).setPreferredWidth(50);
							tcm.getColumn(9).setPreferredWidth(50);
							tcm.getColumn(10).setPreferredWidth(50);
							tcm.getColumn(11).setPreferredWidth(30);
							tcm.getColumn(12).setPreferredWidth(100);
							tcm.getColumn(13).setPreferredWidth(100);
							
							tab.setBounds(0, 10, 719, 235);
							
							
							tab.setVisible(true);
							


tab.setPreferredSize(new java.awt.Dimension(699, 235));
					tab.getTableHeader().setPreferredSize(new java.awt.Dimension(715, 19));
					
					
					sp_tab = new JScrollPane();
					sp_tab.setViewportView(tab);
					sp_tab.add(tab);
					sp_tab.setBounds(12, 149, 719, 300);
					panel1.add(sp_tab);
					sp_tab.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
					panel1.add(getL_auszahlung());
					panel1.add(getTf_auszahlung());

protected Object [][]generateTableData(JCO.Table timesheet){
		
		
		Object [][] data = new Object[timesheet.getNumRows()][14];
		
		
		for (int i = 0; i<timesheet.getNumRows(); i++){
			
			JButton reise = new JButton();
			JButton detail = new JButton();
			reise.addActionListener(new OpenErfassungReiseAL());
			detail.addActionListener(new OpenErfassungStdAL());
			timesheet.setRow(i);
			//tab.setValueAt(timesheet.getDate("TAG"), i, 0);
			//tab.setValueAt(timesheet.getDate("VON"), i, 1);
			data[i][0] = timesheet.getDate("TAG");
			data[i][1] = timesheet.getTime("VON");
			data[i][2]= timesheet.getTime("BIS");
			data[i][3] = timesheet.getDouble("PAUSE");
			data[i][4] = timesheet.getDouble("ERSCHWERNIS_KAT_A");
			data[i][5] = timesheet.getDouble("ERSCHWERNIS_KAT_B");
			data[i][6] = timesheet.getDouble("ERSCHWERNIS_KAT_C");
			data[i][7] = timesheet.getDouble("ERSCHWERNIS_KAT_D");
			data[i][8] = timesheet.getDouble("ERSCHWERNIS_KAT_E");
			data[i][9] = timesheet.getString("URLAUB");
			data[i][10]= timesheet.getString("UEBERSTUNDEN");
			data[i][11]= timesheet.getString("STATUS");
			data[i][12]= reise;
			data[i][13]= detail;	
			
		}
		
		
		return data;
		
	}

Freu mich über jede Hilfe. Danke

Gruß Schwester
 
Hey Schwester,

ich habe bei deinem Quellcode leider nicht 100%ig durchgesehen, habe aber ein Teil deines Problems lösen können, an hand einer anderen Tabelle...
Vielleicht kannst du ja daraus was nehmen oder die Tabelle weiter entwickeln...
Es werden Daten reingschrieben in die einzelnen Spalten und Zeilen und auch die Überschrieft funktioniert.
Mit den Button habe ich jetzt nicht gemacht... Sorry...

Okay liebe Grüße Polli.
und hier der Quellcode:


PHP:
import java.util.*;
import javax.swing.*;


public class MyTableModel 
{
	ArrayList<Integer> randomListX = new ArrayList<Integer>();
	ArrayList<Integer> randomListY = new ArrayList<Integer>();
	int endWertX = 100;
	int endWertY = 100;
	
	public void zufall()
	{
		Random raX = new Random(endWertX);

		for (int i = 0; i <=  endWertX-1; i++)
		{
			int zufallX = (int)Math.round(raX.nextDouble()*220);
			randomListX.add(zufallX);
		}
		
		Random raY = new Random(300);
		for (int i = 0; i <=  endWertY-1; i++)
		{
			int zufallY = (int)Math.round(raY.nextDouble()*220);
			randomListY.add(zufallY);
		}		
	}
	
	public void tabelle()
	{ 
		zufall();
		JFrame achsen = new JFrame("Tabelle der Zahlen");
		achsen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JTable zahlenXY = new JTable();
		achsen.setSize(250,450);
		int v = endWertX;
		int w = endWertX;
		String[][] rowData = new String[v][w];
		String[] columnNames =  {"x-Zahlen", "y-Zahlen"}; 
		int x = 0;
		int y = endWertX;
			for (x = 0; x < y; x++)
			{
				  int z = 0;
				  int a = randomListX.get(x);
				  rowData[x][z] = a+"";
				  
				  z++;
				  int b = randomListY.get(x);
				  rowData[x][z] = b+"";
			  }
   		zahlenXY = new JTable( rowData, columnNames ); 
   		JScrollPane zahlenPanel = new JScrollPane(zahlenXY);
   		zahlenPanel.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
		achsen.add(zahlenPanel);
		achsen.setVisible(true);
	}
	public static void main(String[] args) 
	{
		MyTableModel mtm = new MyTableModel();
		mtm.tabelle();
	}
}
 
Zurück