Ratlos

Pulsonic

Mitglied
Hallo

Ich habe folgendes Problem:
meine Methode um Daten in eine neue JTabel Zeile einzufügen:
public void insert() {
Object[] test = new Object[]{"test1","test2","test3","test4"};
model.addRow(test);
}

nun rufe ich diese Methode aus einer anderen Methode auf. gem debugger ist alles gut und ich komme in diese Methode. nur passiert in meiner Tabelle nichts.

Wenn ich aber diese Methode insert() direkt im konstruktor aufrufe dann funktionierts.

Wieso?

Ich bin seit Stunden am probieren und nichts hilft.. :-(

Vielen Dank für eure Hilfe
 

JCODA

Top Contributor
was passiert, wenn du deinen Code wie folgt ergänzt?

Java:
public void insert() {
   Object[] test = new Object[]{"test1","test2","test3","test4"};
   model.addRow(test);
   model.fireTableDataChanged();
}
 

Pulsonic

Mitglied
Vielen Dank für deine Antwort
Leider bleibt es unverändert. die Methode wird ausgeführt leider aber ohne die Zeile einzufügen...
 

Pulsonic

Mitglied
Hier nocheinmal evt etwas übersichtlicher. Entschuldigt das durcheinander im Code.. er ist noch im aufbau.

Java:
public class Eingaben extends JPanel {

    public Eingaben() { //Konstruktor der klasse Eingaben

        tabelle();

        MyActionListener listener = new MyActionListener();
        best.addActionListener(listener);
          
        setLayout(new GridLayout(7, 2));
        container.setSize(50, 50);
        add(firma);
        add(firma2);
        add(Container);
        add(container);
        add(uhrzeit);
        add(zeiten);
        add(buffer);
        add(best);

    }//end Konstruktor

  

    // Modell erzeugen
    public DefaultTableModel model = new DefaultTableModel();
    Vector zeile = new Vector();

    public void tabelle() {
        String[] columnTitle = {"Transport ID",
            "Ankunftszeit",
            "Zug Nr.",
            "Preis"};

        model.setColumnIdentifiers(columnTitle);

    }
    // View/Controller erzeugen
    JTable table = new JTable(model);
  
    final int MAXCONT = 150;
    public String[] containers() {      // String auf maximale anzahl Container füllen um danach die ComboBox zu füllen
        String[] anzContainer = new String[MAXCONT];

        for (int i = 0; i < 150; i++) {
            anzContainer[i] = "" + i;
        }

        return anzContainer;
    }

    JLabel firma = new JLabel("Firmenname");    //Eingabe des Firmennamens
    JTextField firma2 = new JTextField();

    JLabel Container = new JLabel("Anzahl kleine Container");   //auswählen anz. Container
    JComboBox container = new JComboBox(containers());

    JLabel uhrzeit = new JLabel("Zeit");    //auswählen der Uhrzeit
    String[] uhr = new String[]{"7:10", "7:30", "8:10", "8:30", "9:10", "10:10", "10:30",
        "11:10", "12:10", "12:30", "13:10", "14:10", "14:30", "15:10",
        "16:10", "16:30", "17:10", "18:10", "18:30", "19:10", "20:10",
        "21:10", "21:30", "21:50", "22:10", "22:50"};
    JComboBox zeiten = new JComboBox(uhr);

    JButton best = new JButton("Bestätigen"); //Button um Daten aus GUI an Server zu übermitteln
    JLabel buffer = new JLabel();   // buffer Label um GridLayout richtig darzustellen (keine ausgabe)

    static String[] splitValue = new String[4];

    class MyActionListener implements ActionListener {                                //Methode um die Daten aus dem GUI zu prüfen und in einen String zu speichern.

        public void actionPerformed(ActionEvent e) {
            JButton button = (JButton) e.getSource();
            String data = new String();
          
            if (button == best) {
                data = firma2.getText();
            }

            if (pruefeName(data) == false) {
                JOptionPane.showMessageDialog(null, "Der Firmenname darf kein ; oder : oder , enthalten!", "Ungültige Eingabe", JOptionPane.WARNING_MESSAGE);
            } else {
                String request = "REQUEST;" + data + ";" + container.getSelectedItem() + ";" + zeiten.getSelectedItem();
                System.out.println(request);
                String returnValue = komm(request);
                splitValue = returnValue.split(";");

                if (splitValue[0].equals("ERROR")) {
                    System.out.println(splitValue[1]);
                } else {
                    insert();
                    //Object[] test = new Object[]{"test1","test2"};
                    //model.setRowCount(MAXCONT);
                    //zeile.add(new Object[]{"Test", "13"});
                    //model.addRow(new Object[]{"Test", "13"});
                    //model.addRow(test);
                 
                   

                }
            }
        }
    }//end Class
 

Pulsonic

Mitglied
Java:
public void insert() {
        Object[] test = new Object[]{"test1","test2","test3","test4"};
        model.addRow(test);
        model.fireTableDataChanged();
       
    }

Hier nochmals die Methode insert(),

Vielen Dank für eure Hilfe
 

Harry Kane

Top Contributor
Der code ist nicht vollständig und ziemlich chaotisch. Wenn die insert-Methode Bestandteil der Klasse Eingaben ist, warum postest du sie dann separat? Instanzvariablen sollten ausserdem im Kopf einer Klasse erscheinen (vor dem Konstruktor) und nicht mittendrin.
Ich rate mal: du erzeugst zwei Instanzen von Eingaben. Eine wird in einer Gui angezeigt, und auf der anderen rufst du die Methode insert auf.
zeige mal den Code, wo du Instanzen von Eingaben erzeugtst und die insert-Methode aufrufst.
 

Pulsonic

Mitglied
Hallo Harry vielen Dank für deine Antwort.
Habe den Code mal etwas aufgeräumt und diesmal die ganze Klasse eingefügt.

Java:
package neatgui;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

/**
*
* @author
*/
public class Eingaben extends JPanel {

   
    public DefaultTableModel model = new DefaultTableModel(); // Tabelle erzeugen
    JTable table = new JTable(model); // View/Controller erzeugen     
    JLabel firma = new JLabel("Firmenname");    //Eingabe des Firmennamens
    JTextField firma2 = new JTextField();
    JLabel Container = new JLabel("Anzahl kleine Container");   //auswählen anz. Container
    JComboBox container = new JComboBox(containers());
    JLabel uhrzeit = new JLabel("Zeit");    //auswählen der Uhrzeit
    String[] uhr = new String[]{"7:10", "7:30", "8:10", "8:30", "9:10", "10:10", "10:30",
                                "11:10", "12:10", "12:30", "13:10", "14:10", "14:30", "15:10",
                                "16:10", "16:30", "17:10", "18:10", "18:30", "19:10", "20:10",
                                "21:10", "21:30", "21:50", "22:10", "22:50"};
    JComboBox zeiten = new JComboBox(uhr);
    JButton best = new JButton("Bestätigen"); //Button um Daten aus GUI an Server zu übermitteln
    JButton stats = new JButton("Status Abfragen"); // Button um Status abzufragen
    JTextField id = new JTextField();
    JTextArea stat = new JTextArea(5, 60);
    JLabel buffer = new JLabel();   // buffer Label um GridLayout richtig darzustellen (keine ausgabe) 
    final int MAXCONT = 150;
   
    public Eingaben() { //Konstruktor der klasse Eingaben

        tabelle();
          
        MyActionListener listener = new MyActionListener();
        best.addActionListener(listener);
        stats.addActionListener(listener);
           
        setLayout(new GridLayout(7, 2));
        container.setSize(50, 50);
        add(firma);
        add(firma2);
        add(Container);
        add(container);
        add(uhrzeit);
        add(zeiten);
        add(buffer);
        add(best);

    }//end Konstruktor

   
    public String[] containers() {      // String auf maximale anzahl Container füllen um danach die ComboBox zu füllen
        String[] anzContainer = new String[MAXCONT];

        for (int i = 0; i < 150; i++) {
            anzContainer[i] = "" + i;
        }

        return anzContainer;
    } // end Methode
   
    public void tabelle() { // Methode um Spalten Titel zu vergeben
        String[] columnTitle = {"Transport ID",
                                "Ankunftszeit",
                                "Zug Nr.",
                                "Preis"};
        model.setColumnIdentifiers(columnTitle);
    } // end Methode

    class MyActionListener implements ActionListener {  // Klasse mit Actionlistener

        public void actionPerformed(ActionEvent e) {
            JButton button = (JButton) e.getSource();
                       
            if (button == best) {
                request();               
               
            }   else if (button == stats){
                    String data2 = new String();
                    data2 = "STATE;" + id.getText();

                    System.out.println(data2);
                    String returnValue = Eingaben.komm(data2);
                    stat.insert("\n"+returnValue,0);
               
                }
          
        }//end Methode      
       
    }//end Class
   
    public void request(){
        String data = new String();
        String[] splitValue = new String[4];              
        data = firma2.getText();
               
                if (pruefeName(data) == false) {
                    JOptionPane.showMessageDialog(null, "Der Firmenname darf kein ; oder : oder , enthalten!", "Ungültige Eingabe", JOptionPane.WARNING_MESSAGE);
                } else {
                                String request = "REQUEST;" + data + ";" + container.getSelectedItem() + ";" + zeiten.getSelectedItem();
                                System.out.println(request);
                                String returnValue = komm(request);
                                splitValue = returnValue.split(";");

                                if (splitValue[0].equals("ERROR")) {
                                    System.out.println(splitValue[1]);
                                    String error = splitValue[1];
                                    stat.insert("\n"+error,1);
                   
                                } else {
                                    insert();
                                    model.fireTableDataChanged();
                                    //Object[] test = new Object[]{"test1","test2"};
                                    //model.setRowCount(MAXCONT);
                                    //zeile.add(new Object[]{"Test", "13"});
                                    //model.addRow(new Object[]{"Test", "13"});
                                    //model.addRow(test)                  
                                }
                        }       
    }
   
   
    public void insert() {
        Object[] test = new Object[]{"test1","test2","test3","test4"};
        model.addRow(test);
        model.fireTableDataChanged();
        System.out.println("insert wird aufgerufen");
    }
   

    public static String komm(String pRequest) {  // Kommunikationsmethode um Verbindung mit Server aufzubauen und Daten austauschen
        try {
            Socket socket = new Socket("10.3.1.128", 5432);

            // Socket mit In/Out-Stream verbinden
            OutputStream os = socket.getOutputStream();
            PrintWriter out = new PrintWriter(os);
            InputStreamReader isr = new InputStreamReader(socket.getInputStream());
            BufferedReader in = new BufferedReader(isr);

            // Datenaustausch mit Server
            out.println(pRequest);                  // senden
            out.flush();
            String receiveString = in.readLine();                 // empfangen
            System.out.println("empfangen: " + receiveString);

            // Dem Server mitteilen, das Datenaustausch zu ende ist
            out.println("exit");                                  // senden
            out.flush();

            // Verbindung schliessen
            isr.close();
            os.close();
            socket.close();

            return receiveString;
        } catch (IOException h) {
            System.out.println("Exception: " + h.toString());
        }
        return "Fehler";

    }//end methode

    public boolean pruefeName(String pName) {        //Methode um zu Prüfen, ob ein ; oder ein , verwendet wurde..
        if (pName.contains(";") || pName.contains(",") || pName.contains(":")) {
            return false;
        } else {
            return true;
        }
    }  // end methode

  
}
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...

Ähnliche Java Themen

Neue Themen


Oben