befüllen eines JTables mittels Methode

AlexD

Aktives Mitglied
Hallo zusammen,

Erst einmal bin ich Anfänger und hoffe hier auf qualifizierte Hilfe.

Ich hab eine GUI die in einem JTable Daten aufnehmen soll.

5 Buttons die verschiedene Funktionen haben. Zur Zeit hänge ich an der Implementation.

Ich möchte gerne die Collumns füllen wenn ich auf den Button Enter drücke. Aber ich weiß einfach nicht wie ich die Felder füllen soll?

Mein Code bis jetzt


Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
  
public class MyGuiUserStory extends JFrame implements ActionListener {
    JTable table = null;
    JPanel panel = new JPanel();
    JScrollPane scrollPane=null;
    JLabel namevalue=null;
    JLabel name=null;
    JButton button1,button2,button3,button4,button5;
    private Object label;
   
    
    public MyGuiUserStory() {
        JButton button1 = new JButton("Enter");
        button1.addActionListener(this);
        button1.setBounds(10, 5, 100, 50);
        panel.add(button1);
        
        
        JButton button2 = new JButton("dump");
        button2.addActionListener(this);
        button2.setBounds(10, 5, 150, 50);
        panel.add(button2);
        
        JButton button3 = new JButton("Exit");
        button3.addActionListener(this);
        button3.setBounds(40, 25, 400, 150);
        panel.add(button3);
        
        JButton button4 = new JButton("Store");
        button4.addActionListener(this);
        button4.setBounds(40, 25, 400, 150);
        panel.add(button4);
        
        JButton button5 = new JButton("Load");
        button5.addActionListener(this);
        button5.setBounds(40, 25, 400, 150);
        panel.add(button5);
        
        
        
        String[][] data = { };
  
       String[] columnNames = {"ID der User Story:","Titel der User Story:","Risiko der User Story:"
                                ,"Mehrwert der User Story:","Strafe der User Story:","Priorisierung"};
       table = new JTable(data, columnNames);
       scrollPane = new JScrollPane(table);
  
       panel.setLayout(new FlowLayout());
       scrollPane.setLayout(new ScrollPaneLayout());
       panel.add(scrollPane);
       
       
      
       getContentPane().add(panel, BorderLayout.NORTH);
       getContentPane().add(scrollPane, BorderLayout.CENTER);
        
       setSize(900,200);
       setVisible(true);
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
       
  
    }
  
    private void printDebugData(){
        String NameValue_strtable=table.getValueAt(table.getSelectedRow(),0).toString();
        namevalue.setText(NameValue_strtable);
        repaint();
    }
     
    public static void main(String[] args) {
        MyGuiUserStory frame = new MyGuiUserStory();
        frame.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
       if(ae.getSource() == this.button1){
            data[0][1]="Button1 gedrückt";
        }
        else if(ae.getSource() == this.button2){
            data[1][1]="Button2 gedrückt";
        }
        else if (ae.getSource() == this.button3){
            data[2][1]=" Button3 gedrückt";
        
        
        
    }
    
    public void reiheFuellen(){
    JTextField feld = new JTextField("Gib die ID ein");
    }


vielen Dank im voraus
 

Enceladus271

Bekanntes Mitglied
Wenn du Daten in der Tabelle aktualisieren willst musst du das über das TableModel machen:
Java:
DefaultTableModel newModel = new DefaultTableModel( data, columnNames );
table.setModel( newModel );
 

AlexD

Aktives Mitglied
Danke für die Antwort erstmal,

Ich müsste ja wenn ich eine Array habe welches aktuell leer ist, bei einer Methode die den Table füllen soll, das Aktuelle Array nehmen
dieses mit dem welches zugefügt werden soll verbinden und das neue Array dann einfach abspeichern.

Wie ich mal in Einführung in die Programmierung gelernt habe, ist das aber wohl keine wirklich elegante Lösung. Gibt es denn da nix was wie ich einen leeren Table ganz einfach zur Laufzeit mit Daten füllen kann?
 

Major_Sauce

Bekanntes Mitglied
Doch, leg doch einfach erst mal fest wie groß der Array überhaupt ist, oder hast du eine dynamische Anzahl an daten ?
Dat geht außerdem mit
Java:
String[] data = new String[10] //10 ist die Größe

Danach änderst du das nach belieben und fügst das mit der oben genannten Methode wieder hinzu., feddich.

mfg Major
 

AlexD

Aktives Mitglied
Hallo,

ich weiß nicht wie groß das Array sein wird, das wächst und schrumpft so wieder Anwender das gerne hätte.
 

Major_Sauce

Bekanntes Mitglied
Dann musst du entweder jedes mal einen neuen Array erstellen, oder das über eine List machen (z.B. ArrayList) welche sich per Methode zu einem Array umwandeln lässt.
 

AlexD

Aktives Mitglied
Alles klar!
also komm ich nicht dran vorbei, das Array immer wieder neu anzulegen und dann zu Überschreiben.

Vielen Dank für die Hilfe !

Gruß Alex
 

Major_Sauce

Bekanntes Mitglied
Ich würde das trotzdem mit einer List machen.
Eine ArrayList hat die toArray() methode, mit der du dann problemlos den Array erstellen kannst.
Dann musst du dich nicht mit lästigen Schleifen ärgern.

mfg Major
 

Flown

Administrator
Mitarbeiter
Ich zeig dir mal grundlegend, wie du mit dem TableModel arbeiten könntest. Du kannst auch individuell über das TableModel Zeilen/Spalten löschen und falls dir das DefaultTableModel zu "schwach" an Funktionalität ist, dann schreib dir dein eigenens TableModel.

Java:
import java.awt.BorderLayout;
import java.util.stream.IntStream;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;

public class Test {

  private static final int DEFAULT_MAX = 30;

  public static void main(String... args) {
    SwingUtilities.invokeLater(Test::new);
    // < Java 8
    /*
     SwingUtilities.invokeLater(new Runnable() {
     @Override
     public void run() {
     new Test();
     }
     });
     */
  }

  public Test() {
    JFrame frame = new JFrame("JTable Tutorial");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationByPlatform(true);
    JPanel mainPanel = new JPanel(new BorderLayout());

    DefaultTableModel model = new DefaultTableModel();
    JTable table = new JTable(model);
    mainPanel.add(new JScrollPane(table), BorderLayout.CENTER);

    JPanel settingsPanel = new JPanel();
    settingsPanel.setLayout(new BoxLayout(settingsPanel, BoxLayout.Y_AXIS));

    JLabel limitLabel = new JLabel("Custom limit: ");
    JTextField limitField = new JTextField(String.valueOf(DEFAULT_MAX));

    Box limitBox = Box.createHorizontalBox();
    limitBox.add(limitLabel);
    limitBox.add(limitField);

    ButtonGroup group = new ButtonGroup();
    JRadioButton fibBtn = new JRadioButton("Fibonacci");
    JRadioButton rangeBtn = new JRadioButton("Range");

    fibBtn.addActionListener(e -> setData(Utilities.fibonacci(extractNumber(limitField)), new String[]{"Fibonacci"}, model));
    rangeBtn.addActionListener(e -> setData(Utilities.range(extractNumber(limitField)), new String[]{"Range"}, model));

    // < Java 8
    /*fibBtn.addActionListener(new ActionListener() {

     @Override
     public void actionPerformed(ActionEvent e) {
     setData(Utilities.fibonacci(extractNumber(limitField)), new String[]{"Fibonacci"}, model);
     }
     });
     rangeBtn.addActionListener(new ActionListener() {

     @Override
     public void actionPerformed(ActionEvent e) {
     setData(Utilities.range(extractNumber(limitField)), new String[]{"Range"}, model);
     }
     });
     */
    group.add(fibBtn);
    group.add(rangeBtn);

    Box buttonsBox = Box.createHorizontalBox();
    buttonsBox.add(fibBtn);
    buttonsBox.add(rangeBtn);

    settingsPanel.add(buttonsBox);
    settingsPanel.add(limitBox);

    mainPanel.add(settingsPanel, BorderLayout.SOUTH);

    frame.add(mainPanel);
    frame.pack();
    frame.setVisible(true);
  }

  private void setData(Object[] dataCol, Object[] header, DefaultTableModel model) {
    Object[][] data = new Object[dataCol.length][1];
    for (int i = 0; i < dataCol.length; i++) {
      data[i][0] = dataCol[i];
    }
    model.setDataVector(data, header);
  }

  private int extractNumber(JTextField field) {
    if (!field.getText().isEmpty()) {
      try {
        int nr = Integer.parseInt(field.getText());
        if (nr >= 0) {
          return nr;
        }
      } catch (NumberFormatException ex) {
      }
    }
    field.setText(String.valueOf(DEFAULT_MAX));
    return DEFAULT_MAX;
  }
}

class Utilities {

  /* < Java 8
   public static Integer[] fibonacci(int n) {
   Integer[] result = new Integer[n];
   for (int i = 0; i < n; i++) {
   result[i] = fib(i);
   }
   return result;
   }
   */
  public static Integer[] fibonacci(int n) {
    return IntStream.range(0, n).map(Utilities::fib).boxed().toArray(Integer[]::new);
  }

  private static int fib(int n) {
    if (n <= 0) {
      return 0;
    } else if (n <= 2) {
      return 1;
    } else {
      return fib(n - 1) + fib(n - 2);
    }
  }

  /* < Java 8
   public static Integer[] range(int to) {
   Integer[] result = new Integer[to];
   for (int i = 0; i < to; i++) {
   result[i] = i;
   }
   return result;
   }
   */
  public static Integer[] range(int to) {
    return IntStream.range(0, to).boxed().toArray(Integer[]::new);
  }
}

Achja:
- Benutze für deinen ActionListener anonyme Klassen
- Composition over inheritance: Leite nicht von JFrame ab
- Lass die LayoutManager deine Button bestimmen, wie groß sie sind
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
T TableView über Methode befüllen AWT, Swing, JavaFX & SWT 10
K JavaFX ViewTable mit einer LinkedList befüllen AWT, Swing, JavaFX & SWT 3
B JavaFX TableView aus Collection befüllen AWT, Swing, JavaFX & SWT 1
P Knopf gedrückt -> Textfeld befüllen AWT, Swing, JavaFX & SWT 9
T Swing JTable auslesen und befüllen AWT, Swing, JavaFX & SWT 8
K JavaFX ChoiceBox befüllen AWT, Swing, JavaFX & SWT 14
A checkbox mit allen tabllen aus datenbank befüllen AWT, Swing, JavaFX & SWT 8
Z Window Builder - Labels mit setText befüllen AWT, Swing, JavaFX & SWT 11
I JTable dynamisch aus ArrayList befüllen AWT, Swing, JavaFX & SWT 3
T jTextField mit String befüllen AWT, Swing, JavaFX & SWT 1
J GridBagLayout mit Hilfe einer For-Schleife befüllen AWT, Swing, JavaFX & SWT 1
O JTextArea befüllen AWT, Swing, JavaFX & SWT 2
G JTextArea on the fly aus anderem Programm befüllen AWT, Swing, JavaFX & SWT 4
Q Jtable erneut befüllen AWT, Swing, JavaFX & SWT 3
A Swing JTable mit Vector befüllen AWT, Swing, JavaFX & SWT 2
D Jtable mit einer Liste befüllen AWT, Swing, JavaFX & SWT 3
C Textfeld automatisch befüllen AWT, Swing, JavaFX & SWT 6
D JList mit JPanel's befüllen AWT, Swing, JavaFX & SWT 2
J Swing JTextField befüllen AWT, Swing, JavaFX & SWT 3
C SWT Tabelle mit Werten befüllen AWT, Swing, JavaFX & SWT 5
E Swing Fehler nach Befüllen einer JTable mit gesetzem Rowsort?! AWT, Swing, JavaFX & SWT 10
C Combobox im JFrame aus Datenbank befüllen AWT, Swing, JavaFX & SWT 6
L JFreeChart - Dataset befüllen AWT, Swing, JavaFX & SWT 2
T JTable durch ActionEvent befüllen AWT, Swing, JavaFX & SWT 3
S Swing ComboBox aus Array befüllen AWT, Swing, JavaFX & SWT 2
G Swing JComboBox in JTable beim Aufklappen befüllen AWT, Swing, JavaFX & SWT 3
A JList mit Inhalt befüllen AWT, Swing, JavaFX & SWT 3
R JTable: Zellen einer Spalte unterschiedlich befüllen AWT, Swing, JavaFX & SWT 2
T JPanel neu befüllen / Reflection AWT, Swing, JavaFX & SWT 3
G JTree rekursiv befüllen AWT, Swing, JavaFX & SWT 2
T JTable-Zelle mittels JFileChooser befüllen AWT, Swing, JavaFX & SWT 5
J jTable aus DB befüllen AWT, Swing, JavaFX & SWT 8
N Graphics2D mit unterschiedlichen Grauwerten befüllen AWT, Swing, JavaFX & SWT 3
E JTable; DefaultTableCellRenderer. Zellen farbig befüllen. AWT, Swing, JavaFX & SWT 5
C JComboBox mit JButtons befüllen AWT, Swing, JavaFX & SWT 8
D jCombobox befüllen AWT, Swing, JavaFX & SWT 8
L JComboBox befüllen geht nicht. AWT, Swing, JavaFX & SWT 18
M ComboBox mit Daten befüllen AWT, Swing, JavaFX & SWT 12
M JCombobox neu befüllen AWT, Swing, JavaFX & SWT 8
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
I Einbindung eines jpg/png/icons in eine GUI AWT, Swing, JavaFX & SWT 1
Splayfer Umrandung eines AttributedStrings AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
Jose05 zugreifen auf ein Objekt eines GridPanes AWT, Swing, JavaFX & SWT 0
melaniemueller Verschiebung eines Fensters über Button AWT, Swing, JavaFX & SWT 27
news2swen automatisches erstellen eines Languagefiles AWT, Swing, JavaFX & SWT 1
B Stylen eines JTextPane funktioniert nicht AWT, Swing, JavaFX & SWT 1
MiMa Schliessen eines FXML Fensters? AWT, Swing, JavaFX & SWT 10
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
L AWT Ändern der Farbe eines BufferedImage mit Farbähnlichkeit AWT, Swing, JavaFX & SWT 5
B veränderte Größe eines Panels im Vorhinein wissen? AWT, Swing, JavaFX & SWT 1
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
L JavaFX Validierung eines Spinner AWT, Swing, JavaFX & SWT 1
M Builden eines lauffähigen JAR Files AWT, Swing, JavaFX & SWT 3
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
M JavaFX rotieren eines Kreises mit konstanter Geschwindigkeit AWT, Swing, JavaFX & SWT 1
K JavaFX Allgemeine Fragen zu dem Aufbau eines Programms hinsichtlich der Klassen AWT, Swing, JavaFX & SWT 1
M JavaFX Auf ein UI Elemement eines anderen Controllers zugreifen AWT, Swing, JavaFX & SWT 0
P Bewegung eines Balkens in eineum JPanel welches als Spielfeld fungiert AWT, Swing, JavaFX & SWT 2
Tronert JavaFX Linienstärke eines Separators ändern? AWT, Swing, JavaFX & SWT 3
N JavaFX Group: Gezieltes entfernen eines Objects (Rectangle) AWT, Swing, JavaFX & SWT 0
J Ziehen eines Buttons im JPanel AWT, Swing, JavaFX & SWT 2
J Drag and Drop eines Buttons AWT, Swing, JavaFX & SWT 0
M NullPointerException bei Übergabe eines RadioButtons AWT, Swing, JavaFX & SWT 11
DaCrazyJavaExpert Swing Extern den Text eines nicht fetsgelegten Buttons bekommen. AWT, Swing, JavaFX & SWT 12
J JavaFX Rectangle innerhalb eines Rectangle oder Panes positionieren? AWT, Swing, JavaFX & SWT 1
C JavaFX Inhalt eines SplitPane's durch Menü-Auswahl ändern? AWT, Swing, JavaFX & SWT 13
J linken Bildausschnitt eines BufferedImage abschneiden AWT, Swing, JavaFX & SWT 4
J bestimmten Bereich eines JPanels drucken AWT, Swing, JavaFX & SWT 2
D LookAndFeel Überschreiben eines UIDelegate AWT, Swing, JavaFX & SWT 0
C Zeichen eines 6 -Eckes AWT, Swing, JavaFX & SWT 1
U JavaFX Wechsel der Scene nach betätigen eines Button AWT, Swing, JavaFX & SWT 2
F Screenshot eines JPanel AWT, Swing, JavaFX & SWT 3
S JavaFX TreeItem: Icon am Ende eines Eintrags anhängen AWT, Swing, JavaFX & SWT 2
D TAB Taste innerhalb eines JSpinner AWT, Swing, JavaFX & SWT 2
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
F Swing Rotation eines Bildes mit beliebigen Koordinaten um den Mittelpunkt AWT, Swing, JavaFX & SWT 3
Cromewell JavaFX Nur bestimmten Teil eines Canvas rendern und anzeigen AWT, Swing, JavaFX & SWT 2
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
R Hilfe beim ändern des Hintergrundes eines JFrames AWT, Swing, JavaFX & SWT 9
T Durch klicken eines Buttons Klasse wechseln AWT, Swing, JavaFX & SWT 2
E Swing Copy und Paste eines einzelnen Knoten aus einem JTree AWT, Swing, JavaFX & SWT 1
J Swing Vertikales Zeichnen eines Strings mit Java2D AWT, Swing, JavaFX & SWT 1
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
V JavaFX Teile eines Images Transparent machen AWT, Swing, JavaFX & SWT 4
I JavaFX Langes drücken eines Buttons AWT, Swing, JavaFX & SWT 4
B Swing Wie Witdh und Height eines GuiElements bekommen AWT, Swing, JavaFX & SWT 5
L Swing Teile eines JPanel in eigene Klasse auslagern AWT, Swing, JavaFX & SWT 3
M Swing JPanel innerhalb eines Frames verschieben AWT, Swing, JavaFX & SWT 3
J JavaFX Zugriff auf FXML-Variablen eines anderen Controllers AWT, Swing, JavaFX & SWT 2
K Swing Inhalt eines JPanels lesen AWT, Swing, JavaFX & SWT 3
T Nur bestimmte Bereiche eines Fotos bearbeiten AWT, Swing, JavaFX & SWT 0
J Swing Erstellung eines User Interface AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben