2016-03-24 24 views
0

私はGUIコーディングに取り掛かっていますので、私はクラスで与えられた例のためにいくつかの異なるインターフェースを作成するために自分自身でそれを取っています。GUIでこれらのエラーが発生する原因は何ですか?

ここで、上部に「ラベル」とそれに続くそれぞれのテキストフィールドを入力して、もう一方を入力するGUIを作成しようとしています。これには、一連の2つのボタンと最後に、編集不可能な結果フィールド(後で結果のフィールドをいくつか導入する予定です)と不透明なフィールドが続きます。私は完全な一連のエラーを取得するので、私はちょうど何か愚かな間違っているのだろうかと思っていた。

パネルのコードはここにある:事前に

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
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.JTextField; 

public class GradePanel extends JPanel { 

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

public GradePanel() { 

    // Button to add entry to list 
    addEntry = new JButton("Add entry to list"); 
    // addEntry.addActionListener(new tempListener()); 

    // Button to print all entries in correct format 
    calculate = new JButton("Print all user grades"); 
    // calculate.addActionListener(new tempListener()); 

    //Create Labels 
    name = new JLabel("Enter student name: "); 
    nameField = new JTextField(10); 
    // nameField.addActionListener(new tempListener()); 

    grade = new JLabel("Enter students mark: "); 
    gradeField = new JTextField(5); 
    // gradeField.addActionListener(new tempListener()); 

    //Bottom segment for result 
    resultField = new JTextField(); 
    resultField.setOpaque(false); 
    resultField.setEditable(false); 

    setLayout(new BorderLayout()); 

    //Bottom Panel 
    JPanel GradePanel = new JPanel(); 
    GradePanel.setBorder(BorderFactory.createTitledBorder("Students/Results")); 
    GradePanel.setOpaque(false); 
    GradePanel.add(resultField); 

    //Button Panel 
    JPanel ButtonPane = new JPanel(); 
    ButtonPane.add(addEntry, BoxLayout.LINE_AXIS); 
    ButtonPane.add(calculate, BoxLayout.LINE_AXIS); 

    //Label Panel 
    JPanel labelPane = new JPanel(); 
    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); 

    //Add all panels to the main panel 
    add(labelPane, BorderLayout.NORTH); 
    add(ButtonPane, BorderLayout.CENTER); 
    add(GradePanel, BorderLayout.SOUTH); 

    setBackground(Color.WHITE); 
    setPreferredSize(new Dimension(400, 300)); 
} 

ありがとう!

EDIT:エラーを忘れました:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: illegal component position 
    at java.awt.Container.addImpl(Container.java:1087) 
    at java.awt.Container.add(Container.java:467) 
    at GradePanel.<init>(GradePanel.java:55) 
    at Grade$1.run(Grade.java:26) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) 
    at java.awt.EventQueue.access$500(EventQueue.java:97) 
    at java.awt.EventQueue$3.run(EventQueue.java:709) 
    at java.awt.EventQueue$3.run(EventQueue.java:703) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 

EDIT 2:

public class GradePanel2 extends JPanel { 

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

    public GradePanel2() { 

     // Button to add entry to list 
     addEntry = new JButton("Add entry to list"); 
     // addEntry.addActionListener(new tempListener()); 

     // Button to print all entries in correct format 
     calculate = new JButton("Print all user grades"); 
     // calculate.addActionListener(new tempListener()); 

     // Create Labels 
     name = new JLabel("Enter student name: "); 
     nameField = new JTextField(10); 
     // nameField.addActionListener(new tempListener()); 

     grade = new JLabel("Enter students mark: "); 
     gradeField = new JTextField(5); 
     // gradeField.addActionListener(new tempListener()); 

     // Bottom segment for result 
     resultField = new JTextField(); 
     resultField.setOpaque(false); 
     resultField.setEditable(false); 

     setLayout(new BorderLayout()); 

     // Bottom Panel 
     JPanel GradePanel = new JPanel(); 
     GradePanel.setBorder(BorderFactory.createTitledBorder("Students/Results")); 
     GradePanel.setOpaque(false); 
     GradePanel.add(resultField); 

     // Button Panel 
     JPanel ButtonPane = new JPanel(); 
     ButtonPane.setLayout(new BoxLayout(ButtonPane, BoxLayout.PAGE_AXIS)); 
     ButtonPane.add(addEntry, BoxLayout.LINE_AXIS); 
     ButtonPane.add(calculate, BoxLayout.LINE_AXIS); 

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

     // Add all panels to the main panel 
     add(labelPane, BorderLayout.NORTH); 
     add(ButtonPane, BorderLayout.CENTER); 
     add(GradePanel, BorderLayout.SOUTH); 

     setBackground(Color.WHITE); 
     setPreferredSize(new Dimension(400, 300)); 
    } 

} 
+3

を見てhaivingことから始める必要があり、あなたが見ているエラーは次のようになり...? – KevinO

+1

'setPreferredSize(new Dimension(400,300));'は悪い考えです。 – MadProgrammer

+1

'ButtonPane'は' FlowLayout'を使っていますが、あなたはそれを作るのに混乱を招く 'BoxLayout'制約を適用しようとしているようですAWT-EventQueue-0 "java.lang.IllegalArgumentException:不正なコンポーネント位置" *例外 – MadProgrammer

答えて

1

をあなたは、デフォルトでFlowLayoutを使用しているJPanelBoxLayout制約を適用している...

JPanel ButtonPane = new JPanel(); 
ButtonPane.add(addEntry, BoxLayout.LINE_AXIS); 
ButtonPane.add(calculate, BoxLayout.LINE_AXIS); 

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: illegal component position 
    at java.awt.Container.addImpl(Container.java:1085) 
    at java.awt.Container.add(Container.java:465) 
    at javaapplication866.JavaApplication866$GradePanel.<init>(JavaApplication866.java:98) 

おそらく、あなたはHow to Use BoxLayout

+0

いくつかの変更を加えてもエラーが発生する場合は、今すぐ何が起こるのでしょうか? – SkyPlus

+0

明日はGridBagLayoutで試してみて、やり直してみましょう。でも、これを修正して自分のエラーを学ぶべきです。助けてくれてありがとう – SkyPlus

関連する問題