2016-03-30 2 views
1

Ich habe wirklich Mühe, diesen Code zusammen zu montieren. Der endgültige Plan ist, dass ich zwei Eingabefelder habe, von denen einer nach einem Namen fragt und einer nach einer Marke fragt. Ich würde dann einen Namen und eine Markierung eingeben und das Programm würde auf Knopfdruck diese Werte in eine Tabelle eintragen, die durch eine Summe eine Note für diese Markierung (A, B, C usw.) vergeben würde; und schließlich, wenn alle Werte eingegeben wurden, würde der Benutzer eine andere Taste drücken, die zu einer Textdatei eine Liste von Namen und deren geeignete Note drucken würde. Das ist das Endspiel.Wie erstelle ich eine Tabelle, die in ein Panel eingefügt werden kann?

Derzeit habe ich wirklich Schwierigkeiten, die Tabelle zu erstellen und sie in den unteren Teil meines Rahmens zu platzieren, so dass sie jedes Mal aktualisiert wird, wenn eine Taste gedrückt wird. Der untere Teil meines Rahmens ist 'myBottomPanel'. Würde es wirklich schätzen, wenn Sie mich beraten und möglicherweise auf meinem Weg zum Endspiel helfen könnten.

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.BorderFactory; 
import javax.swing.Box; 
import javax.swing.BoxLayout; 
import javax.swing.JButton; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.JTextField; 

public class GradePanel2 extends JPanel { 

    private JButton addEntry, calculate; 
    private JLabel name, grade, nameResult, gradeResult; 
    private JTextField nameField, gradeField; 

    public GradePanel2() { 
     // Button to add entry to list 
     addEntry = new JButton("Add entry to list"); 
     addEntry.addActionListener(new buttonListener()); 
     // Button to print all entries in correct format 
     calculate = new JButton("Print all user grades"); 
     calculate.addActionListener(new buttonListener()); 
     // Create Labels 
     name = new JLabel("Enter student name: "); 
     nameField = new JTextField(10); 
     nameField.addActionListener(new buttonListener()); 
     grade = new JLabel("Enter students mark: "); 
     gradeField = new JTextField(5); 
     gradeField.addActionListener(new buttonListener()); 
     // Bottom segment for result 
     setLayout(new BorderLayout()); 
     // Button Panel 
     JPanel ButtonPane = new JPanel(); 
     ButtonPane.setLayout(new BoxLayout(ButtonPane, BoxLayout.PAGE_AXIS)); 
     addEntry.setAlignmentX(CENTER_ALIGNMENT); 
     calculate.setAlignmentX(CENTER_ALIGNMENT); 
     ButtonPane.add(Box.createVerticalStrut(15)); 
     ButtonPane.add(addEntry); 
     ButtonPane.add(Box.createVerticalStrut(15)); 
     ButtonPane.add(calculate); 
     // Label Panel 
     JPanel labelPane = new JPanel(); 
     labelPane.setLayout(new BoxLayout(labelPane, BoxLayout.PAGE_AXIS)); 
     labelPane.add(name); 
     labelPane.add(Box.createRigidArea(new Dimension(5, 0))); 
     labelPane.add(nameField); 
     labelPane.add(Box.createRigidArea(new Dimension(0, 2))); 
     labelPane.add(grade); 
     labelPane.add(Box.createRigidArea(new Dimension(5, 0))); 
     labelPane.add(gradeField); 
     myBottomPanel mybottompanel = new myBottomPanel(); 
     // Add all panels to the main panel 
     add(labelPane, BorderLayout.NORTH); 
     add(ButtonPane, BorderLayout.CENTER); 
     add(mybottompanel, BorderLayout.SOUTH); 
     setBackground(Color.WHITE); 
     setPreferredSize(new Dimension(400, 300)); 
    } 

    public class resultTable extends myBottomPanel { 

     public void mainTable() { 
      GridLayout mainLayout = (new GridLayout(1, 0)); 
      String[] columnNames = {"NAME", "GRADE"}; 
      Object[][] data = {{nameField.getText(), gradeField.getText()}}; 
      JTable table = new JTable(data, columnNames); 
      table.setPreferredScrollableViewportSize(new Dimension(500, 70)); 
      table.setFillsViewportHeight(true); 
      JScrollPane scrollPane = new JScrollPane(table); 
      table.setFillsViewportHeight(true); 
     } 
    } 

    public class myBottomPanel extends JPanel { 

     public myBottomPanel() { 
      resultTable results = new resultTable(); 
      add(results); 
      setBorder(BorderFactory.createTitledBorder("Students/Results")); 
      setOpaque(false); 
     } 
    } 

    public class buttonListener implements ActionListener { 

     @Override 
     public void actionPerformed(ActionEvent event) { 
      String studentName; 
      int studentMark; 
      if (event.getSource() == addEntry) { 
       studentName = nameField.getText(); 
       String intMark = gradeField.getText(); 
       studentMark = Integer.parseInt(intMark); 
       System.out.println(studentName); 
       System.out.println(studentMark); 
      } 
     } 
    } 
} 

Schließlich bin ich nicht sicher, wie man den Code bekommen geklebt richtig für das Forum, so entschuldigen Sie die oberen paar Linien verlegt werden; Ich habe ihnen 4 Leerzeichen hinzugefügt, damit sie im Code angezeigt werden.

Antwort

2

Ihr vorhandener Code löst java.lang.StackOverflowError aus, während er versucht, den MyBottomPanel-Konstruktor rekursiv vom GradePanel2-Konstruktor aufzurufen.

Konzentrieren Sie sich darauf, wie Sie eine Zeile zu einer Tabelle hinzufügen. Sie könnten mit dieser vollständigen, funktionierenden example beginnen. Ändern Sie die TableModel, um Ihrem Anwendungsfall zu entsprechen, fügen Sie ein Paar Textfelder zu panel hinzu, und ändern Sie addRow(), um die Feldwerte zu verwenden.

image

+0

Bearbeiten Sie Ihre Frage ein schließen [MCVE], die Ihr überarbeitetes Konzept zeigt. – trashgod

Verwandte Themen