Variablen an anderes Fenster übergeben

Ossiost

Grünschnabel
Hi,
also auf die Idee, die Methoden für den Button zusammenzufassen bin ich auch schon gekommen, aber da hats an der Umsetzung gehapert. Es ist ja eigentlich auch nur ein Button und der hat eben mehrere Funktionen. Er soll die verschiedenen Arraylisten auslesen und da es sich um 3 Listen mit Checkboxen handelt, sind die Methoden sich sehr ähnlich bzw. gleich nur ich wusste nicht wie ich die zu einer machen soll, weil ich ja im Konstruktor der Methoden jeweils die Arrayliste angebe. kann ich da auch mehrere angeben?

Hier nochmal mein gesamter Quelltext:
1.Fenster:
Code:
public class Fenster1 extends JFrame 
{
	
	
	private static final long serialVersionUID = 1L;
	private JPanel pWillkommen;
	private JPanel pMessdaten;
	private JPanel pMessungen;
	private JPanel pButton;
	private JLabel Willkommen;
	private JLabel Messdaten;
	private JLabel Messungen;
	private JTextField nMessdaten;
	private JTextField nMessungen;
	private JButton Weiter;
	
	int AnzMessdaten = 0;
	int AnzMessungen = 0;
	
	public Fenster1 ()
	{
		super("Fenster 1");
		setSize(500,300);
		setVisible(true);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
		
		pWillkommen = new JPanel();
		pMessdaten = new JPanel();
		pMessungen = new JPanel();
		pButton = new JPanel();
		Willkommen = new JLabel("Willkommen bei LabTable");
		Messdaten = new JLabel("Wie viele Messdaten (z.B. Temperatur, Zeit...) möchten Sie aufnehmen?");
		Messungen = new JLabel("Wie viele Messungen möchten Sie durchführen?");
		Weiter = new JButton("Weiter");
		nMessdaten = new JTextField(2);
		nMessdaten.setHorizontalAlignment(nMessdaten.RIGHT);
		nMessungen = new JTextField(2);
		nMessungen.setHorizontalAlignment(nMessungen.RIGHT);
		
		Font Ueberschrift = (Willkommen.getFont().deriveFont(Font.BOLD, 20));
		Willkommen.setFont(Ueberschrift);
		
		pWillkommen.add(Willkommen);
		pMessdaten.add(Messdaten);
		pMessdaten.add(nMessdaten);
		pMessungen.add(Messungen);
		pMessungen.add(nMessungen);
		pButton.add(Weiter);
		add(pWillkommen);
		add(pMessdaten);
		add(pMessungen);
		add(pButton);
		
		Weiter.addActionListener(new WeiterButton ());
		
	}
	
	public class WeiterButton implements ActionListener {
		
		
		public void actionPerformed(ActionEvent e) {
			
			String varMessdaten = nMessdaten.getText();
			String varMessungen = nMessungen.getText();
			
				try {
					
					Integer.parseInt(varMessdaten);
					Integer.parseInt(varMessungen);
					
				}
				catch(Exception ex) {
				
					JOptionPane.showMessageDialog(null,"Bitte geben Sie jeweils eine ganze Zahl ein, die größer als 0 ist!");
					
				}					
			
			AnzMessdaten = Integer.parseInt(varMessdaten);	
			AnzMessungen = Integer.parseInt(varMessungen);
			
			if(AnzMessdaten<1 | AnzMessungen<1 ) {
				
				JOptionPane.showMessageDialog(null,"Bitte geben Sie jeweils eine ganze Zahl ein, die größer als 0 ist!");
				
			}
			else {
				System.out.println("klappt!");
				close();
				Fenster2 window2 = new Fenster2 (AnzMessdaten, AnzMessungen);
				
				window2.setVisible(true);
			}
			
		}


	
		
	}

	public void close() {
		
		WindowEvent winClosingEvent = new WindowEvent(this,WindowEvent.WINDOW_CLOSING);
		Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(winClosingEvent);
		
	}

2.Fenster:
Code:
public class Fenster2 extends JFrame 
{

	private JLabel Frage1;
	private JButton Weiter2;
	private JLabel lSumme;
	private JLabel lMittelwert;
	private JLabel lStandardabweichung;
	int a;
	int b;
	int c;
	int AnzReihen;
	int x;
	int y;
	
	public Fenster2 (int AnzMessdaten, int AnzMessungen)
	{
		super("Fenster 2");
		x = AnzMessdaten;
		y = AnzMessungen;
		setSize(500,25*x+175);
		setVisible(true);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setLayout(null);
		
		
		List<JComboBox> comboBoxList = new ArrayList<JComboBox>();
		List<JCheckBox> checkBoxListSum = new ArrayList<JCheckBox>();
		List<JCheckBox> checkBoxListMit = new ArrayList<JCheckBox>();
		List<JCheckBox> checkBoxListSta = new ArrayList<JCheckBox>();
		
		String[] Messdaten = {"", "Druck", "Masse", "Spannung", "Stromstärke", "Temperatur", "Volumen", "Zeit"};
		
		JPanel spalte0 = new JPanel();
		spalte0.setLayout(null);
		spalte0.setBounds(50, 50, 200, 300);
		JPanel spalte1 = new JPanel();
		spalte1.setLayout(null);
		spalte1.setBounds(300, 50, 50, 300);
		JPanel spalte2 = new JPanel();
		spalte2.setLayout(null);
		spalte2.setBounds(350, 50, 50, 300);
		JPanel spalte3 = new JPanel();
		spalte3.setLayout(null);
		spalte3.setBounds(400, 50, 50, 300);
		
		Frage1 = new JLabel ("Welche Daten möchten Sie messen?");
		Frage1.setBounds(20, 10, 460, 25);
		lSumme = new JLabel ("\u2211");
		lSumme.setBounds(5, 0, 25, 25);
		lSumme.setToolTipText("Summe");
		lMittelwert = new JLabel ("\u2205");
		lMittelwert.setBounds(5, 0, 25, 25);
		lMittelwert.setToolTipText("Mittelwert");
		lStandardabweichung = new JLabel ("\u03C3");
		lStandardabweichung.setBounds(5, 0, 25, 25);
		lStandardabweichung.setToolTipText("Standardabweichung");
		Weiter2 = new JButton ("Weiter");
		Weiter2.setBounds(20, 25*(x-1)+125, 150, 25);
		
		spalte1.add(lSumme);
		spalte2.add(lMittelwert);
		spalte3.add(lStandardabweichung);
		
		for(int i = 0; i < x; i++)
		{
			JComboBox cbMessdaten = new JComboBox(Messdaten);
			cbMessdaten.setBounds(0, 25*i+25, 150, 25);
			JCheckBox sumBox = new JCheckBox();
			sumBox.setBounds(0, 25*i+25, 25, 25);
			JCheckBox mitBox = new JCheckBox();
			mitBox.setBounds(0, 25*i+25, 25, 25);
			JCheckBox staBox = new JCheckBox();
			staBox.setBounds(0, 25*i+25, 25, 25);
			
			comboBoxList.add(cbMessdaten);
			checkBoxListSum.add(sumBox);
			checkBoxListMit.add(mitBox);
			checkBoxListSta.add(staBox);
			
			spalte0.add(cbMessdaten);
			spalte1.add(sumBox);
			spalte2.add(mitBox);
			spalte3.add(staBox);
			
			
		}
		
		add(Frage1);
		add(spalte0);
		add(spalte1);
		add(spalte2);
		add(spalte3);
		add(Weiter2);
		
		Weiter2.addActionListener(new WeiterButton0 (comboBoxList));
		Weiter2.addActionListener(new WeiterButton (checkBoxListSum));
		Weiter2.addActionListener(new WeiterButton2 (checkBoxListMit));
		Weiter2.addActionListener(new WeiterButton3 (checkBoxListSta));
	}
	
	private class WeiterButton0 implements ActionListener 
	{
		List<JComboBox> comboBoxList;
	
		public WeiterButton0(List<JComboBox> list0) 
			{
			comboBoxList = list0;
			}
		
		public void actionPerformed(ActionEvent event) 
			{
			
			for(int i = 0; i < comboBoxList.size(); i++)
				{
				JComboBox combo = comboBoxList.get(i);
				String item = (String)combo.getSelectedItem();
						
				}
					
			}
				
		}
		
	
		
	private class WeiterButton implements ActionListener 
		{
		List<JCheckBox> checkBoxListSum;
		
		

		public WeiterButton(List<JCheckBox> list) 
			{
			checkBoxListSum = list;
			}
		
		public void actionPerformed(ActionEvent e) 
			{
			
			
			for(int i = 0; i < checkBoxListSum.size(); i++)
				{
				if (checkBoxListSum.get(i).isSelected()) 
					{
					System.out.println("Box "+i+ " ist ausgewählt");
					a = 1;
					} 
				else 
					{
					
					}
				
		
				}
			
			}
		
		}
	
	public class WeiterButton2 implements ActionListener 
		{
		List<JCheckBox> checkBoxListMit;

		public WeiterButton2(List<JCheckBox> list2) 
			{
			checkBoxListMit = list2;
			}
		
		public void actionPerformed(ActionEvent e) 
			{
			for(int i = 0; i < checkBoxListMit.size(); i++)
				{
				if (checkBoxListMit.get(i).isSelected()) 
					{
					System.out.println("Box "+i+ " ist ausgewählt");
					b = 1;
					} 
				else 
					{
				
					}
				
		
				}
			
			}
		
		
		}
	
	private class WeiterButton3 implements ActionListener 
		{
		List<JCheckBox> checkBoxListSta;
		
		
		public WeiterButton3(List<JCheckBox> list3) 
			{
			checkBoxListSta = list3;
			}
		
		public void actionPerformed (ActionEvent e) 
			{
			for(int i = 0; i < checkBoxListSta.size(); i++)
				{
				if (checkBoxListSta.get(i).isSelected()) 
					{
					System.out.println("Box "+i+ " ist ausgewählt");
					c = 1;
					} 
				else 
					{
				
					}
				
		
				}
			
			AnzReihen = y + a + b + c;
			
			System.out.println("Anzahl zusätzliche Reihen: " + AnzReihen);
			
			close2();
			Fenster3 window3 = new Fenster3 (x, AnzReihen);
			window3.setVisible(true);
			
			}
		
		}
	


public void close2() 
	{
		
	WindowEvent winClosingEvent = new WindowEvent(this,WindowEvent.WINDOW_CLOSING);
	Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(winClosingEvent);
		
	}
}

Danke, dass du nochmal drüber guckst :)
 

I2oxxi

Mitglied
Jetzt wo ich das im ganzen sehe :p
also: actionPerformed wird bei einem ButtonKlick aufgerufen. Ich weiß noch nichtmal obs irgendeine Regel gibt, wann welches kommt, aber dir ist glaub ich nicht garantiert, das er die Events so nacheinander ausführst wie du willst. Du gehst ja sogesehen davon aus, das er erst die Zahlen hochzählt und dann closed.
Was du nehmen solltes ist ein ItemListener, der aufpasst, ob in den boxen was ausgewählt ist und danach eine zahl +-1 nimmt (Klassenvariable).
Die neuen reihen, wovon hängen die genau ab? von ALLEN combo und ALLEN Checkboxen oder?
ich hab bei dir irgendwie keine übersicht, habe erst jetzt erkannt das es ja auch checkboxen und nciht nur comboboxen sind xd

und bitte: setvisible ans ende der gui :s deswegen haste solche grafikfehler drin

Edit:: was hast du eigentlich in weiterbutton0 vor? irgendwie macht der code rein garnix im endeffekt

also ich kann da so jetzt nicht viel finden, wenn du mir aber einmal ganz genau die logik von den dynamischen zeilen erklärs und wie sich die neuen "reihen" dann zusammensetzen (die zahl) könnt ich das mal auf meine art schreiben und dir soweit erklären wie ich kann ^^
 
Zuletzt bearbeitet:

Ossiost

Grünschnabel
Hi also erstmal danke, dass du dir so viel Mühe gibst :)

Also die Grundidee des Programms ist, dass der Benutzer im "Fenster1" eingibt wie viele Messdaten und Messungen er aufnehmen möchte. Durch klicken auf den Button sollen die Daten eingelesen werden und das Fenster1 geschlossen. Im "Fenster2" soll sollen dann genau so viele Comboboxen entstehen, wie der Benutzer Messdaten ausgewählt hat. Pro Combobox sollen 3 Checkboxen entstehen, weil der Benutzer dann durch auswählen der Checkboxen Entscheiden soll, ob er zu den jeweiligen Messdaten automatisch die Summe, den Mittelwert, oder die Standardabweichung oder sogar alles berechnet haben will. Mit dem Klick auf den Button sollen nun diese Daten eingelesen werden und ein drittes Fenster geöffnet werden. Im dritten Fenster soll dann eine leere Tabelle generiert werden, in die der Benutzer Messwerte eintragen kann.
Die neuen Reihen haben den Sinn, dass ja in der Tabelle eine weitere Reihe hinzugefügt werden muss, wenn der Mittelwert, oder die Summe berechnet wird, damit der errechnete Wert in dieser ausgegeben werden kann.
Der Weiterbutton0 hat als Ergebnis die Variable "item" die Idee dahinter ist, dass damit die Header der einzelnen Spalten benannt werden. Also der Benutzer wählt in Fenster2 die Daten die er messen möchte aus und dann wird z.B. eine Spalte direkt mit "Spannung" beschriftet.
Ich weis halt nicht, ob ich das so hinbekomme wie ich mir das vorstelle, aber vielleicht hast du ja noch eine Idee wie ich dass umsetzen kann.
Danke nochmal

Gruß Ossiost
 

I2oxxi

Mitglied
also klartext, reihen = Messdatenanzahl + anzahlzahl der angeklickten checkboxen? (pro zeile?)
weil der user könnte ja auch bei messung 1 die summe haben wolle, bei messung 2 aber nicht (die zeilen sind ja die zahl der messungen richtig?)
damit hättest du eine tabelle die manchmal mehr oder weniger SPALTEN (nicht reihen? ) benötigt?!
da bin ich mir nicht sicher ob das überhaupt möglich ist, daher die felder einfach direkt mitmachen und zur not leer lassen?
weil jede ZEILE (messung?) könnte ja unterschiedlich behandelt werden, oder nicht?
das würde die sache nähmlich verkomplizieren und man sollte dann (wenn man es einfach halten will, wie gesagt, bin mir noch nichtmal sicher ob das geht, eine tabelle mit underschiedlichen spalten) einfach die tabelle automatisch mit summe, standartabweichung etc machen und die felder, wenn nicht benötigt "leer lassen"


Edit:: ups, neu gepostet anstatt zu editieren x_x (wieso krieg ich mein alten text im fenster schon angezeigt :eek:)
 
Zuletzt bearbeitet:

Ossiost

Grünschnabel
Also Reihen = Anzahl der vom benutzer eingegeben Messungen + noch 0-3 Reihen, wenn der Benutzer Summe, Mittelwert und Standardabweichung dazu haben will. Ich habe mal in Excel kurz eine Tabelle gemacht so wie ich mir das vorstelle und als Bild angehängt.

Tabelle.jpg

Gruß
Ossiost
 

I2oxxi

Mitglied
also reihe = zeile ^^
aber das problem was ich angesprochen hab besteht immernoch, der benutzer könnte ja bei der spannung die summe haben wollen, bei der zeit z.B. aber nicht und damit hätte die tabelle ja manchmal mehr zeilen, weiße wie ich mein? daher die zeilen immer machen und zur not leer lassen

Edit:: also ich hab jetzt schonmal bischen was gebastelt, vielleicht kannst du damit ja schon was anfangen und komms selbs weiter. ich versuch aber auch noch rum, hänge grade an den ZEILENNAMEN und dan, das man wirklich was reinschreiben kann (da brauch man glaub ich sonen CollEditor oder so ^^) hier was ich schon so hab, bei fragen schieß los

myFenster2
Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.*;
import javax.swing.*;




public class MyFenster2 extends JFrame implements ItemListener,ActionListener{
	
	//ItemListener überwacht Checkboxen, ActionListener den Weiter Button
	
    private JLabel Frage1;
    private JButton Weiter2;
    private JLabel lSumme;
    private JLabel lMittelwert;
    private JLabel lStandardabweichung;
    private int a;
    private int b;
    private int c;
    private int AnzReihen;
    private int anzMessdaten;
    private int anzMessungen;
    private List<JComboBox> comboBoxList = new ArrayList<JComboBox>();
    private List<JCheckBox> checkBoxListSum = new ArrayList<JCheckBox>();
    private List<JCheckBox> checkBoxListMit = new ArrayList<JCheckBox>();
    private List<JCheckBox> checkBoxListSta = new ArrayList<JCheckBox>();
    
    //hier speichern wir eine matrix, die mit true und false sagt ob die boxen angeklickt sind 
    //(anschaulich könnte man die Matrix sogesehen auf die boxen legen und die werte ablesen
    //kp wie ich das erklären soll xd
    boolean[][] datenWahl;
	
	public MyFenster2(int anzMessdaten, int anzMessungen)
	{
		super("Fenster 2");
		this.anzMessdaten=anzMessdaten;
		this.anzMessungen=anzMessungen;
		this.datenWahl= new boolean[anzMessdaten][3];
		init();
		setVisible(true);

	}
	
	public void init()
	{
		setSize(500,25*anzMessdaten+175);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setLayout(null);
        JPanel spalte0 = new JPanel();
        spalte0.setLayout(null);
        spalte0.setBounds(50, 50, 200, 300);
        JPanel spalte1 = new JPanel();
        spalte1.setLayout(null);
        spalte1.setBounds(300, 50, 50, 300);
        JPanel spalte2 = new JPanel();
        spalte2.setLayout(null);
        spalte2.setBounds(350, 50, 50, 300);
        JPanel spalte3 = new JPanel();
        spalte3.setLayout(null);
        spalte3.setBounds(400, 50, 50, 300);
        
        Frage1 = new JLabel ("Welche Daten möchten Sie messen?");
        Frage1.setBounds(20, 10, 460, 25);
        lSumme = new JLabel ("\u2211");
        lSumme.setBounds(5, 0, 25, 25);
        lSumme.setToolTipText("Summe");
        lMittelwert = new JLabel ("\u2205");
        lMittelwert.setBounds(5, 0, 25, 25);
        lMittelwert.setToolTipText("Mittelwert");
        lStandardabweichung = new JLabel ("\u03C3");
        lStandardabweichung.setBounds(5, 0, 25, 25);
        lStandardabweichung.setToolTipText("Standardabweichung");
        Weiter2 = new JButton ("Weiter");
        Weiter2.setBounds(50, 25*(anzMessdaten-1)+125, 150, 25);
        
        spalte1.add(lSumme);
        spalte2.add(lMittelwert);
        spalte3.add(lStandardabweichung);
        
        String[] Messdaten = {"", "Druck", "Masse", "Spannung", "Stromstärke", "Temperatur", "Volumen", "Zeit"};
        
        for(int i = 0; i < anzMessdaten; i++)
        {
            JComboBox cbMessdaten = new JComboBox(Messdaten);
            cbMessdaten.setBounds(0, 25*i+25, 150, 25);
            JCheckBox sumBox = new JCheckBox();
            sumBox.setBounds(0, 25*i+25, 25, 25);
            JCheckBox mitBox = new JCheckBox();
            mitBox.setBounds(0, 25*i+25, 25, 25);
            JCheckBox staBox = new JCheckBox();
            staBox.setBounds(0, 25*i+25, 25, 25);
            
            comboBoxList.add(cbMessdaten);
            checkBoxListSum.add(sumBox);
            checkBoxListMit.add(mitBox);
            checkBoxListSta.add(staBox);
            
            sumBox.addItemListener(this);
            mitBox.addItemListener(this);
            staBox.addItemListener(this);
            
            spalte0.add(cbMessdaten);
            spalte1.add(sumBox);
            spalte2.add(mitBox);
            spalte3.add(staBox);
            
            
        }
        
        add(Frage1);
        add(spalte0);
        add(spalte1);
        add(spalte2);
        add(spalte3);
        add(Weiter2);
        
        Weiter2.addActionListener(this);
	}

	//hier wird das boolean array für fenster3 immer aktuell gehalten
	@Override
	public void itemStateChanged(ItemEvent e) {
		// TODO Auto-generated method stub
		if(checkBoxListSum.contains(e.getSource()))
		{
			datenWahl[checkBoxListSum.indexOf(e.getSource())][0]= ((JCheckBox) (e.getSource())).isSelected();
		}
		else if(checkBoxListMit.contains(e.getSource()))
		{
			datenWahl[checkBoxListMit.indexOf(e.getSource())][1]= ((JCheckBox) (e.getSource())).isSelected();

		}
		else if(checkBoxListSta.contains(e.getSource()))
		{
			datenWahl[checkBoxListSta.indexOf(e.getSource())][2]= ((JCheckBox) (e.getSource())).isSelected();
		}
		
		System.out.println(myControl());
		
	}
	
	//kleine ausgabe fürs bool array
	public String myControl()
	{
		String s = "";
		for(int i=0; i<datenWahl.length;i++)
		{
			s+="\nZeile "+i+" = ";
			for(int j = 0; j < datenWahl[i].length;j++)
			{
				s+=datenWahl[i][j]+" ";
			}
		}
		return s;
	}

	//fesnter 3 öffnen wenn button geklickt
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if(e.getSource().equals(Weiter2))
		{
			MyFenster3 f = new MyFenster3(getNamesforHeader(),anzMessungen,datenWahl);
			this.dispose();
		}
		
	}
	
	//damit lesen wir die HeaderLines für Fesnter 3 aus
	public String[] getNamesforHeader()
	{
		String[] s = new String[1+comboBoxList.size()];
		s[0] = "Messungen";
		for(int i = 1; i<=comboBoxList.size();i++)
		{
			s[i] = comboBoxList.get(i-1).getSelectedItem().toString();
		}
		return s;
	}

}

myFenster3
Java:
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;


public class MyFenster3 extends JFrame implements TableModelListener
{
    
    private int Reihen = 10;
    private int Spalten = 3;
    private String[] headers;
    private int messungen;
    private JScrollPane scroll;
    private boolean[][] checkBoxMatrix;
    private JTable tabelle;
    
    public MyFenster3(String[] headers,int messungen,boolean[][] checkBoxMatrix)
    {
        super("Fenster 3");
    	this.headers = headers;
    	this.messungen=messungen;
    	this.checkBoxMatrix = checkBoxMatrix;
        init();

        setVisible(true);

        
    }
    
    public void init()
    {
    	setSize(600,800);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setLayout(null);
        
        MyTableModel model = new MyTableModel(new Object[messungen+3][headers.length], headers,checkBoxMatrix);
        tabelle = new JTable(model);
        model.addTableModelListener(this);
        tabelle.setBounds(10, 10, 500, 600);
        scroll = new JScrollPane(tabelle);
        scroll.setBounds(10,10,500,600);
        
        add(scroll);
    }

	@Override
	public void tableChanged(TableModelEvent e) {
		// TODO Auto-generated method stub
		tabelle.repaint();
		
	}
}

mein TabellenModel
Java:
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;


public class MyTableModel extends AbstractTableModel implements TableModelListener{

	private String[] columnNames;
	private Object[][] data;
	private boolean[][] checkBoxMatrix;
	
	public MyTableModel(Object[][] data, String[] columnNames,boolean[][] checkBoxMatrix){
		this.data = data;
		this.columnNames = columnNames;
		this.checkBoxMatrix=checkBoxMatrix;
		int j=0;
		for(int i=0;i<getRowCount()-3;i++)
		{
			setValueAt(i+1, i, 0);
			j=i;
		}
		j++;
		setValueAt("Summe", j, 0);
		j++;
		setValueAt("Mittelwert", j, 0);
		j++;
		setValueAt("Standartabweichung", j, 0);
		this.addTableModelListener(this);
	}
	
	@Override
	public int getColumnCount() {
		return columnNames.length;
	}

	@Override
	public int getRowCount() {
		return data.length;
	}
	
    public String getColumnName(int col) {
        return columnNames[col];
    }

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

	public void setValueAt(Object value, int row, int col) {
		data[row][col] = value;
		if(row < getRowCount()-3)
			fireTableCellUpdated(row, col);
	}
	
	public boolean isCellEditable(int row, int col) {
         if (col > 0&&row< getRowCount()-3) {
             return true;
         } else {
             return false;
         }
     }
	
	public String[] getColumnNames() {
		return columnNames;
	}

	public void setColumnNames(String[] columnNames) {
		this.columnNames = columnNames;
	}

	public Object[][] getData() {
		return data;
	}

	public void setData(Object[][] data) {
		this.data = data;
	}

	@Override
	public void tableChanged(TableModelEvent e) {
		// TODO Auto-generated method stub
		int column = e.getColumn();
		System.out.println("Spalte: "+column);
		
		if(checkBoxMatrix[column-1][0])
		{
			System.out.println("Summe: "+getSumme(column));
			setValueAt(getSumme(column), getRowCount()-3, column);
		}
		
		if(checkBoxMatrix[column-1][1])
		{
			System.out.println("MittelWert: "+getMittelwert(column));
			setValueAt(getMittelwert(column), getRowCount()-2, column);
			
		}
		
		if(checkBoxMatrix[column-1][2])
		{
			System.out.println("Abweichung: "+getStandartabweichung(column));
			setValueAt(getStandartabweichung(column), getRowCount()-1, column);
		}
		
		
		
	}
	
	public double getSumme(int i)
	{
		double d = 0;
		for(int j=0; j < getRowCount()-3;j++)
		{
			if(data[j][i]!=null)
				d+= Double.parseDouble((String)data[j][i]);
		}
		return d;
		
	}
	
	public double getMittelwert(int i)
	{
		return getSumme(i)/(getRowCount()-3);
	}
	
	public double getStandartabweichung(int i)
	{
		double d = 0;
		double arithmetischesMittel=getMittelwert(i);
		for(int j = 0;j<getRowCount()-3;j++)
		{
			if(data[j][i]!=null)
			{
				double f = Double.parseDouble((String)data[j][i])-arithmetischesMittel;
				d+=f*f;
			}
		}
		d=d/(getRowCount()-3);
		
		
		return d;
	}
	
	
	

	
}


dein fesnter1 hab ich so gelassen wie es ist. bei fenster 2 ist der button manchmal nicht sichtbar, kp woran das liegt :eek: geh eifach unter die checkboxen, wenn ich mit der maus über den geh erscheint der immer (wtf-? xd)

also wirklich weiter als das hier komm ich imo auch nicht, mit den tabellen models hab ich auch nicht so viel erfahrung, aber du brauhst fürs editieren der tabelle nen celleditor, für die rownames bin ich ratlos :s

Edit2:: also ich kann die "zeilennamen" normal einfügen, als header weiß ich nicht wie :s habs reineditiert.
wie soll der user die daten eingeben? direkt in die tabelle schreiben oder? wenn ja mit celleditor, da kann ich dir leider nicht wirklich helfen, aber hab das gefunden:
http://www.java-forum.org/awt-swing-swt/27796-jtable-editierbar-enter-event.html

Edit3:: so, ich hab was anständiges zum laufen bekommen, ich editier die aktuellen codes rein und dann kannse dir das ja mal angucken, was u davon hälts ^^ um etwas in die tabelle zu schreiben, doppelklick auf die zelle (manche zellen sind gesperrt).
hoffe meine formeln sind richtig xd fenster1 is weiterhin unverändert.
 
Zuletzt bearbeitet:

Ossiost

Grünschnabel
Nochmal Danke :)
also ich muss das jetzt erstmal kleinschrittig durchgehen, damit ich verstehe, was du da genau gemacht hast, weil ich bin eben absoluter Anfänger, beschäftige mich jetzt seit knapp 2 Wochen mit Java. Hätte mir mein Prof ruhig mal sagen können, dass das doch nen etwas komplizierteres Projekt ist.
Das was du meintest mit den Zeilen erstellen und im zweifel leer lassen, war auch so von mir gedacht, nur war meine überlegung dabei, dass wenn der Benutzer z.B. von keiner einzigen Messreihe die Summe haben möchte, dass man diese Zeile dann einfach komplett weglässt.
Ja also die Idee war schon, dass der Benutzer dann direkt in die Tabelle eintippt. Ist das dann wirklich so kompliziert? Weil ich habe es ja schon geschafft ne Tabelle zu erstellen nur hatte die leider keine Header also weder bei den Spalten noch bei den Zeilen, aber wenn man die einzelnen Zellen mit nem Doppelklick angeklickt hat konnte man was rein schreiben. Leider nur von links nach recht, was ich bei Zahlen gerne andersrum hätte.
 

I2oxxi

Mitglied
ja hatte bei meinem model vorhing die cellIsEditable falsch implementiert, deswegen gings nicht richtig.
das mit dem leer lassen wenn keine checkbox geklickt ist kriegt man auch hin. gehst halt das ganze bool array durch und wenn alles false dann die sachen weglassen weglassen (ist ja ne einfache abfrage)
ausrichtung ändern ist bestimmt auch mit einer zeile code getan, damit kenn ich mich aber nicht aus
 

Akeshihiro

Erfahrenes Mitglied
@I2oxxi
Mach mal dein Posteingang sauber oder gib mir deine E-Mail-Adresse, damit ich dich wieder zuspammen kann ^^