2017-09-12 12 views
0

私は目的を学習するために、Java SwingでUIを作成しようとしています。 main.javaファイルとパネルコンポーネントを分離しようとするまで、私はAutobahnを実行していました。私がここでやろうとしたのは、別の割り当てのクラスを別々に作成して、main.javaファイルを短くして、自分の独立した割り当てファイルを簡単に変更できるようにすることでした。 私は、単一のファイルに入れたときに動作する予想される結果と、切り離されたコードを投稿します。GUI Stackoverflowerror

Main.java

package gui; 

import java.awt.CardLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.JPanel; 

public class Main { 

    //Basic Components 
     JFrame frame = new JFrame(); 

     JMenuBar menubar = new JMenuBar(); 
     JMenu menuPanels = new JMenu("Assignments"); 
     JMenuItem assign_1 = new JMenuItem("Assignment 1"); 
     JMenuItem assign_2 = new JMenuItem("Assignment 2"); 
     JMenuItem assign_3 = new JMenuItem("Assignment 3"); 


     JPanel panel = new JPanel(); 
     JPanel pnlAss_1 = new JPanel(); 
     JPanel pnlAss_2 = new JPanel(); 
     JPanel pnlAss_3 = new JPanel(); 

     CardLayout cardLayout = new CardLayout(); 

     public Main() 
     { 
      panel.setLayout(cardLayout); 

      Assignment_1 pnlAss_1_class = new Assignment_1(); 
      pnlAss_1 = pnlAss_1_class.CreatePanel(pnlAss_1); 



      panel.add(pnlAss_1, "pnlAss_1"); 
      panel.add(pnlAss_2, "pnlAss_2"); 

      cardLayout.show(panel, "pnlAss_1"); 

      //Menubars and menupanels 
      menubar.add(menuPanels); 
      menuPanels.add(assign_1); 
      menuPanels.add(assign_2); 

      assign_1.addActionListener(new ActionListener() { 
       public void actionPerformed(ActionEvent E) 
       { 
        cardLayout.show(panel, "pnlAss_1"); 
       } 
      }); 
      assign_2.addActionListener(new ActionListener() { 
       public void actionPerformed(ActionEvent e) 
       { 
        cardLayout.show(panel, "pnlAss_2"); 
       } 
      }); 

      frame.setJMenuBar(menubar); 
      frame.add(panel); 
      frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
      frame.setSize(800, 300); 
      frame.setVisible(true); 
     } 

     public static void main(String[] ar) 
     { 
      new Main(); 
     } 
} 





Assignment_1.java 





    package gui; 

import java.awt.CardLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.*; 

public class Assignment_1 extends Main { 

    JLabel ID, Name, Contact, Address; JLabel Intro; 
    JTextField id, name, contact, address; 

    JButton close; 

    Assignment_1() 
    { 

    } 

    JPanel CreatePanel(JPanel panel) 
    { 
     panel.setSize(500, 300); 
     panel.setLayout(null); 

     Intro = new JLabel("First Assignment"); Intro.setBounds(10, 10, 300, 20); 
     panel.add(Intro); 

     //Labels definition & addition 
     ID = new JLabel("Student ID"); ID.setBounds(10, 30, 100, 20); 
     Name = new JLabel("Name"); Name.setBounds(110, 30, 100, 20); 
     Contact = new JLabel("Phone Number"); Contact.setBounds(210, 30, 100, 20); 
     Address = new JLabel("GitHub Address"); Address.setBounds(310, 30, 100, 20); 
     panel.add(ID); panel.add(Name); panel.add(Contact); panel.add(Address); 

     //TextFields definition & addition 
     id = new JTextField("2012203079"); id.setBounds(10, 50, 100, 20); id.setEditable(false); 
     name = new JTextField("정상원"); name.setBounds(110, 50, 100, 20); name.setEditable(false); 
     contact = new JTextField("010-8611-9898"); contact.setBounds(210, 50, 100, 20); contact.setEditable(false); 
     address = new JTextField("https://github.com/swj0418"); address.setBounds(310, 50, 160, 20); address.setEditable(false); 
     panel.add(id); panel.add(name); panel.add(contact); panel.add(address); 

     //Buttons definition& addition 
     close = new JButton("Close"); 
     close.setBounds(400, 100, 70, 30); 
     close.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent e) 
      { 
       System.exit(0); 
      } 
     }); 
     panel.add(close); 

     return panel; 
    } 
} 

私はここでの問題は、JFrameのに何かを持っていると思います。 私はAssignment_1と対称であるため、Assignment_2 javaを投稿していません この問題に関して私を助けてください。

+0

をいずれかを使用していないとして継承したいscroll down toパソコンへ転送場合は、メインを拡張し削除してみてくださいあなたがまだ1つを使用する方法を学んでいない場合、今は完璧な機会です。デバッガでコードをステップ実行する方法を学習することは、開発者のツールボックスで最も重要なツールの1つであり、使用方法を学ぶのは早すぎることはありません。 –

答えて

1

本当にAssignment1クラスがMainから継承される必要がありますか。継承プロパティはまったく使用されていません。

問題はMainのオブジェクトコンストラクタで、Assignment1オブジェクトを初期化しようとしています。これはMainのコンストラクタであるスーパーコンストラクタをクラス化し、再びAssignment1のコンストラクタを呼び出してオブジェクトを作成します。再帰的に何も停止せずにオンとオンを繰り返す。したがって、スタックオーバーフローエラー。

はちょうどあなたが本当にあなたがコードをステップ実行するときどのようなデバッガはあなたを教えていますか?親クラスから

+0

ありがとう!私はメインを継承する愚か者だった...魔法のように解決された –

関連する問題