Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将另一个类的JPanel添加到主类的JPanel中_Java_Swing_Nullpointerexception_Jframe_Jpanel - Fatal编程技术网

Java 将另一个类的JPanel添加到主类的JPanel中

Java 将另一个类的JPanel添加到主类的JPanel中,java,swing,nullpointerexception,jframe,jpanel,Java,Swing,Nullpointerexception,Jframe,Jpanel,我有一个主类,它有两个面板,左面板和右面板。左侧面板已经有一些组件,右侧面板在北部有一个标签和一个按钮。我想将另一个类中的JPanel添加到主类的右面板中。到目前为止,我所做的是实例化该类并将其添加到rightPanel,但它似乎给了我错误。以下是我的主类代码: package project; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.FlowLayout; import java

我有一个主类,它有两个面板,左面板和右面板。左侧面板已经有一些组件,右侧面板在北部有一个标签和一个按钮。我想将另一个类中的JPanel添加到主类的右面板中。到目前为止,我所做的是实例化该类并将其添加到rightPanel,但它似乎给了我错误。以下是我的主类代码:

    package project;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;

import nodeChooser.gristDatabaseUtilities.SetupParentPopulation;
import nodeChooser.internal.NodeChooser;
import nodeChooser.publicInterfaces.Enumerations;
import nodeChooser.publicInterfaces.Precondition;
import nodeChooser.publicInterfaces.SubmitButtonListener;
import nodeChooser.publicInterfaces.UserSelection;

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;

import utilities.Utilities;


public class Main extends JPanel implements SubmitButtonListener{

    private JPanel mainPanel;
    private JPanel leftPanel;
    private JPanel rightPanel;
    private JPanel centerPanel;
    private JPanel southPanel;
    private JSplitPane splitPane;

    private Document cat;
    private Document qt;


    public Main() {
        mainPanel = new JPanel(new BorderLayout());
        setupJpanels();

        setupMainWindow();


        cat = Utilities.buildXMLDocumentFromFile("cat-woking-age.xml");
        qt = Utilities.buildXMLDocumentFromFile("qt-woking-age.xml");

        // this is how we plug nodeChooser into our project
        NodeChooser nodeChooser = new NodeChooser(this, leftPanel, cat, qt);
    }

    private void setupJpanels() {
        splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
        splitPane.setContinuousLayout(true);
        splitPane.setDividerLocation(560);
        splitPane.setOneTouchExpandable(true);
        leftPanel = new JPanel();
        rightPanel = new JPanel(new BorderLayout());
        splitPane.setTopComponent(leftPanel);
        splitPane.setBottomComponent(rightPanel);

        mainPanel.add(splitPane, BorderLayout.CENTER);


    }

    private void setupMainWindow() {
        final JFrame frame= new JFrame("GRiST Project '13");
        frame.addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(WindowEvent winEvt) {
                System.exit(0); 
            }
            public void windowOpened(WindowEvent e) {
                //frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
            }
        });


        frame.getContentPane().add(mainPanel);
        Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
        int width=600;
        int height=400;
        frame.setSize(width, height);
        frame.setLocation((screenSize.width-width)/2,(screenSize.height-height)/2);
        frame.setVisible(true);   
    }

    /**
     * this receives callbacks from nodeChooser
     */
    @Override
    public void submitClicked(final UserSelection userSelection) {

        //the parameter userSelection has all the information that nodeChooser wants to pass on to us.

        String query= "SELECT everything FROM mygrist_samples WHERE ";

        JTextArea selectLabel= new JTextArea(query);
        selectLabel.setLineWrap(true);
        JPanel submitButtonPanel= new JPanel(new FlowLayout(FlowLayout.CENTER));
        JButton setSubmit= new JButton("Submit Query");


        setSubmit.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                SetupParentPopulation parentpop= new SetupParentPopulation(userSelection);

                JPanel setSplitPanel= new JPanel(new BorderLayout());
                String rows= parentpop.getRowsInserted();
                JLabel getInsertedRows= new JLabel(rows+" records found.", JLabel.LEFT);
                setSplitPanel.add(getInsertedRows, BorderLayout.CENTER);
                rightPanel.add(setSplitPanel);
                **SplitMain splitMain= new SplitMain();
                rightPanel.add(splitMain);**
            }
        });
        submitButtonPanel.add(setSubmit);
        rightPanel.add(selectLabel, BorderLayout.NORTH);
        rightPanel.add(submitButtonPanel, BorderLayout.CENTER);

        if (userSelection.getPreconditions().size() > 0) {

            String getCorrespondingCodeFromDatabase;

            for (int i = 0; i < userSelection.getPreconditions().size(); i++) {

                    getCorrespondingCodeFromDatabase = userSelection.getPreconditions().get(i).getCode();
                    getCorrespondingCodeFromDatabase = getCorrespondingCodeFromDatabase.replaceAll("-", "_");
                    Enumerations enum1= new Enumerations();

                    String getCorrespondingRelationship= enum1.getOperator(userSelection.getPreconditions().get(i).getRelationship());

                    query += getCorrespondingCodeFromDatabase + " " + getCorrespondingRelationship
                            + " '" + userSelection.getPreconditions().get(i).getAnswer() + "'";
                    selectLabel.setText(query);
                    selectLabel.revalidate();
                    repaint();
                    if (i != userSelection.getPreconditions().size() - 1) {
                        query += " AND ";
                    }
            }
        } else {
            System.out.println("No records found");
        }

    }


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

    }

}
成套工程;
导入java.awt.BorderLayout;
导入java.awt.Dimension;
导入java.awt.FlowLayout;
导入java.awt.GridLayout;
导入java.awt.Label;
导入java.awt.Toolkit;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.AdjustmentEvent;
导入java.awt.event.AdjustmentListener;
导入java.awt.event.WindowEvent;
导入javax.swing.JButton;
导入javax.swing.JComponent;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JOptionPane;
导入javax.swing.JPanel;
导入javax.swing.JScrollBar;
导入javax.swing.JScrollPane;
导入javax.swing.JSplitPane;
导入javax.swing.JTextArea;
导入nodeChooser.gristDatabaseUtilities.SetupParentPopulation;
导入nodeChooser.internal.nodeChooser;
导入nodeChooser.publicInterfaces.Enumerations;
导入nodeChooser.publicInterfaces.Premission;
导入nodeChooser.publicInterfaces.SubmitButtoListener;
导入nodeChooser.publicInterfaces.UserSelection;
导入org.w3c.dom.Document;
导入org.w3c.dom.NamedNodeMap;
导入实用程序。实用程序;
公共类Main扩展JPanel实现SubmitButtonListener{
私人JPanel主面板;
私人JPanel leftPanel;
私人JPanel rightPanel;
私人JPanel中心面板;
私人JPanel southPanel;
私有JSplitPane拆分窗格;
私人文件类别;
私人文件;
公用干管(){
mainPanel=newjpanel(newborderlayout());
setupJpanels();
setupMainWindow();
cat=Utilities.buildXMLDocumentFromFile(“cat woking age.xml”);
qt=Utilities.buildXMLDocumentFromFile(“qt woking age.xml”);
//这就是我们将nodeChooser插入到项目中的方式
NodeChooser NodeChooser=新的NodeChooser(此,左面板,cat,qt);
}
私有void setupJpanels(){
splitPane=新的JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
splitPane.setContinuousLayout(true);
splitPane.setDividerLocation(560);
splitPane.setOneTouchExpandable(true);
leftPanel=newjpanel();
rightPanel=newjpanel(newborderlayout());
splitPane.setTopComponent(左面板);
splitPane.setBottomComponent(右面板);
添加(拆分窗格,边框布局,中间);
}
私有void setupMainWindow(){
最终JFrame=新JFrame(“GRiST项目'13”);
frame.addWindowListener(新java.awt.event.WindowAdapter(){
公共无效窗口关闭(WindowEvent winEvt){
系统出口(0);
}
公共无效窗口已打开(WindowEvent e){
//setExtendedState(JFrame.MAXIMIZED_二者);
}
});
frame.getContentPane().add(主面板);
维度screenSize=Toolkit.getDefaultToolkit().getScreenSize();
整数宽度=600;
内部高度=400;
框架尺寸(宽度、高度);
帧。设置位置((屏幕大小。宽度)/2,(屏幕大小。高度)/2);
frame.setVisible(true);
}
/**
*这将接收来自nodeChooser的回调
*/
@凌驾
public void submitClicked(最终用户选择用户选择){
//参数userSelection包含nodeChooser想要传递给我们的所有信息。
String query=“从mygrist\u示例中选择所有内容”;
JTextArea selectLabel=新建JTextArea(查询);
选择label.setLineWrap(true);
JPanel submitButtonPanel=newjpanel(newflowlayout(FlowLayout.CENTER));
JButton setSubmit=新JButton(“提交查询”);
setSubmit.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
SetupParentPopulation parentpop=新的SetupParentPopulation(用户选择);
JPanel setSplitPanel=新的JPanel(新的BorderLayout());
String rows=parentpop.getRowsInserted();
JLabel getInsertedRows=新的JLabel(行+找到的记录),JLabel.LEFT;
setSplitPanel.add(getInsertedRows,BorderLayout.CENTER);
右面板。添加(setSplitPanel);
**SplitMain SplitMain=新的SplitMain();
右面板。添加(splitMain)**
}
});
submitButtonPanel.add(setSubmit);
右面板。添加(选择Label,BorderLayout.NORTH);
添加(submitButtonPanel,BorderLayout.CENTER);
if(userSelection.getPremissions().size()>0){
从数据库获取对应代码的字符串;
对于(int i=0;i    package project;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;

import nodeChooser.gristDatabaseUtilities.SetupSubsamplePopulation;
import nodeChooser.publicInterfaces.Enumerations;
import nodeChooser.publicInterfaces.SplitSubmitButtonListener;
import nodeChooser.publicInterfaces.UserSelectedSplit;

import org.w3c.dom.Document;

import utilities.Utilities;
import conditions.splitUtilities.SplitChooser;

public class SplitMain extends JPanel implements SplitSubmitButtonListener{

    private JPanel mainPanel;
    private JPanel leftPanel;
    private JPanel rightPanel;
    private JPanel centerPanel;
    private JPanel southPanel;
    private JSplitPane splitPane;

    private Document cat;
    private Document qt;


    public SplitMain() {

        rightPanel = new JPanel(new BorderLayout());

        cat = Utilities.buildXMLDocumentFromFile("cat-woking-age.xml");
        qt = Utilities.buildXMLDocumentFromFile("qt-woking-age.xml");

        // this is how we plug splitChooser into our project
        SplitChooser splitChooser = new SplitChooser(this, rightPanel, cat, qt);

    }

    @Override
    public void submitSplitClicked(final UserSelectedSplit userSplitSelection) {

                String query= "SELECT everything FROM mygrist_samples WHERE ";

                JTextArea selectLabel= new JTextArea(query);
                selectLabel.setLineWrap(true);
                JPanel submitButtonPanel= new JPanel(new FlowLayout(FlowLayout.CENTER));
                JButton setSubmit= new JButton("Submit Query");


                setSubmit.addActionListener(new ActionListener() {

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        SetupSubsamplePopulation parentpop= new SetupSubsamplePopulation(userSplitSelection);

                        JPanel setSplitPanel= new JPanel(new BorderLayout());
                        String rows= parentpop.getRows();
                        JLabel getInsertedRows= new JLabel(rows+" records found.", JLabel.LEFT);
                        setSplitPanel.add(getInsertedRows, BorderLayout.NORTH);
                        getInsertedRows.revalidate();
                        getInsertedRows.repaint();
                        rightPanel.add(setSplitPanel, BorderLayout.CENTER);
                    }
                });
                submitButtonPanel.add(setSubmit);
                rightPanel.add(selectLabel, BorderLayout.NORTH);
                rightPanel.add(submitButtonPanel, BorderLayout.CENTER);
                if (userSplitSelection.getSplitConditions().size() > 0) {

                    String getCorrespondingCodeFromDatabase;

                    for (int i = 0; i < userSplitSelection.getSplitConditions().size(); i++) {

                            getCorrespondingCodeFromDatabase = userSplitSelection.getSplitConditions().get(i).getCode();
                            getCorrespondingCodeFromDatabase = getCorrespondingCodeFromDatabase.replaceAll("-", "_");
                            Enumerations enum1= new Enumerations();

                            String getCorrespondingRelationship= enum1.getOperator(userSplitSelection.getSplitConditions().get(i).getRelationship());

                            query += getCorrespondingCodeFromDatabase + " " + getCorrespondingRelationship
                                    + " '" + userSplitSelection.getSplitConditions().get(i).getAnswer() + "'";
                            selectLabel.setText(query);
                            selectLabel.revalidate();
                            repaint();
                            if (i != userSplitSelection.getSplitConditions().size() - 1) {
                                query += " AND ";
                            }
                    }
                } else {
                    System.out.println("No records found");
                }

    }

}
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at conditions.splitUtilities.SplitChooser.<init>(SplitChooser.java:133)
at project.SplitMain.<init>(SplitMain.java:49)
at project.Main$2.actionPerformed(Main.java:145)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    package conditions.splitUtilities;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

import nodeChooser.internal.IconSource;
import nodeChooser.internal.SplitConditionChangeListener;
import nodeChooser.publicInterfaces.Enumerations.QuestionType;
import nodeChooser.publicInterfaces.Enumerations.Relationship;
import nodeChooser.publicInterfaces.SplitSubmitButtonListener;
import nodeChooser.publicInterfaces.UserSelectedSplit;
import nodeChooser.publicInterfaces.UserSplit;

import org.w3c.dom.Document;
import org.w3c.dom.Node;

public class SplitChooser implements SplitConditionChangeListener {

    private JPanel mainPanel;
    private JPanel centerpanelWrapper;
    private Document qt;
    private Document cat;
    private ArrayList<SplitConditionGui> splitConditions;

    /**
     * 
     * @param submitButtonListener a class that implements this interface so that we can notify them when submit button has been clicked
     * @param panel the JPanel on which the node chooser would be painted
     * @param cat the cat xml
     * @param qt the qt xml
     */
    public SplitChooser(final SplitSubmitButtonListener splitSubmitButtonListener, JPanel panel, Document cat, Document qt) {

        this.qt = qt;
        this.cat = cat;
        splitConditions = new ArrayList<SplitConditionGui>();
        centerpanelWrapper = panel;
        mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));

        addSplitCondition();
        JPanel northPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
        JButton addButton = new JButton("Add Precondition");
        addButton.setIcon(IconSource.createImageIcon("images2/add.png"));
        addButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                addSplitCondition();
            }
        });
        northPanel.add(addButton);

        JPanel southPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
        JButton queryButton = new JButton("Submit");
        queryButton.setIcon(IconSource.createImageIcon("images2/accept.png"));
        queryButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                splitSubmitButtonListener.submitSplitClicked(new UserSelectedSplit() {

                    @Override
                    public ArrayList<UserSplit> getSplitConditions() {
                        ArrayList<UserSplit> splitConditionList = new ArrayList<>();
                        for(final SplitConditionGui splitList: splitConditions) {
                            if(splitList.getNodeCode()  == null)
                                continue;
                            splitConditionList.add(new UserSplit() {

                                @Override
                                public boolean isLeafNode() {
                                    return splitList.isLeaf();
                                }

                                @Override
                                public Node getSelectedCatNode() {
                                    return splitList.getCatNode();
                                }

                                @Override
                                public Relationship getRelationship() {
                                    return splitList.getRelationship();
                                }

                                @Override
                                public Node getQTNode() {
                                    return splitList.getQtNode();
                                }

                                @Override
                                public QuestionType getNodeType() {
                                    return splitList.getQuestionType(splitList.getQtNode());
                                }

                                @Override
                                public String getCode() {
                                    return splitList.getNodeCode();
                                }

                                @Override
                                public String getAnswer() {
                                    return splitList.getAnswer();
                                }


                            });
                        }



                        return splitConditionList;
                    }
                });
            }
        });
        southPanel.add(queryButton);


        JScrollPane jsp = new JScrollPane(mainPanel);
        jsp.setBorder(null);

//this part gives nullPointerException and I don't know why it's passing null. Seems to be working fine for other classes
        centerpanelWrapper.removeAll();
        centerpanelWrapper.setLayout(new BorderLayout(10,5));
        centerpanelWrapper.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5), BorderFactory.createTitledBorder("Preconditions")));
        centerpanelWrapper.add(jsp, BorderLayout.CENTER);
        centerpanelWrapper.add(northPanel, BorderLayout.NORTH);
        centerpanelWrapper.add(southPanel, BorderLayout.SOUTH);

        centerpanelWrapper.revalidate();
        centerpanelWrapper.repaint();
    }
    private void addSplitCondition() {
        SplitConditionGui splitConditionGui = new SplitConditionGui(this, cat, qt);
        splitConditions.add(splitConditionGui);
        mainPanel.add(splitConditionGui.getJpanel());
        mainPanel.revalidate();
        mainPanel.repaint();
    }

    private void removeSplitCondition(SplitConditionGui splitConditionGui) {
        splitConditions.remove(splitConditionGui);
        mainPanel.remove(splitConditionGui.getJpanel());
        mainPanel.revalidate();
        mainPanel.repaint();
    }

    @Override
    public void removedCondition(SplitConditionGui splitConditionGui) {
        removeSplitCondition(splitConditionGui);
    }


}