是什么导致了我的GUI中的所有这些错误



我正在努力进行GUI编码,所以我自己只是为课堂上给出的示例创建了几个不同的接口。

我试图在这里创建一个GUI,它在顶部有标签,后面跟着它们各自的文本字段,供用户输入,其中一个在另一个的顶部。然后,我希望后面有一系列的两个按钮,最后是一个不可编辑的结果字段(稍后将介绍一些结果字段)和不透明的结果字段。我犯了一系列错误,所以我想知道我是否只是做错了什么。

面板的代码在这里:

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

提前感谢!

编辑:忘记错误:

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)

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

您正在将BoxLayout约束应用于默认使用FlowLayoutJPanel。。。

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)

也许您应该先看看如何使用BoxLayout

相关内容

最新更新