2016-03-30 14 views
1

私は本当に一緒にこのコードを組み立てるのに苦労しています。最終的な計画は、2つの入力フィールドがあり、1つは名前を要求し、もう1つはマークを求めるフィールドです。私は名前とマークを入力し、ボタンを押すとプログラムはテーブルにこれらの値を入力し、その合計でそのマーク(A、B、Cなど)にグレードを割り当てます。最後にすべての値が入力されると、ユーザは、テキストファイルに名前および適切な等級のリストを印刷する別のボタンを押す。それが最後のゲームです。パネルに挿入できるテーブルを生成する方法は?

現在、私はテーブルを作成してフレームの下部に配置するのが難しいため、1つのボタンを押すたびに更新されます。私のフレームの下部は 'myBottomPanel'です。あなたが私に助言し、最終的にゲームに行く途中で私を助けてくれるなら、本当に感謝します。

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); 
      } 
     } 
    } 
} 

は最後に、私は、フォーラムのために正しく貼り付けコードを取得するので、紛失されたトップの数行を言い訳する方法についてはわかりませんよ。私はちょうど彼らに4スペースを追加したので、彼らはコードに表示されます。

答えて

2

GradePanel2コンストラクタからMyBottomPanelコンストラクタを再帰的に呼び出そうとすると、既存のコードでjava.lang.StackOverflowErrorがスローされます。

テーブルに行を追加する方法に焦点を当てて、この完全な作業から始めることがあります。example。ユークケースに合わせてTableModelを変更し、panelにテキストフィールドのペアを追加し、フィールド値を使用するようにaddRow()を変更します。

image

+0

[MCVE]を示し、あなたの修正されたアプローチを含めるようにあなたの質問を編集してください。 – trashgod

関連する問題