Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.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 GUI程序不工作_Java_Swing_User Interface_Jscrollpane - Fatal编程技术网

Java GUI程序不工作

Java GUI程序不工作,java,swing,user-interface,jscrollpane,Java,Swing,User Interface,Jscrollpane,我一直在开发一个应用程序,您可以在其中设置一个包含项目的类别列表,然后将其制作成一个文本文件。但是我为它制作的GUI不能完全工作。我认为错误位于名为Cat或addcategory的JMenuItem中,或者位于我显示Categories更新方法的方式中。它应该请求一个名称,创建一个以该名称命名的类别,并将其显示在JScrollPane中,但什么也没有出现。代码如下: public class GUIBuilder { public JFrame frame; public JPa

我一直在开发一个应用程序,您可以在其中设置一个包含项目的类别列表,然后将其制作成一个文本文件。但是我为它制作的GUI不能完全工作。我认为错误位于名为Cat或addcategory的JMenuItem中,或者位于我显示Categories更新方法的方式中。它应该请求一个名称,创建一个以该名称命名的类别,并将其显示在JScrollPane中,但什么也没有出现。代码如下:

public class GUIBuilder {
    public JFrame frame;
    public JPanel LeftPanel;
    public JPanel RightPanel;
    public JScrollPane scroll;
    public JMenuBar bar;
    public JMenu File;
    public JMenu Add;
    Inventory inv;

    public void go() {
        frame = new JFrame();

        scroll = new JScrollPane();

        bar = new JMenuBar();
        File = new JMenu("File");
        Add = new JMenu("Add...");
        bar.add(File);
        bar.add(Add);

        JMenuItem Save = new JMenuItem(new AbstractAction("Save") {
            private static final long serialVersionUID = 1L;

            public void actionPerformed(ActionEvent arg0) {

            }
        });
        JMenuItem Load = new JMenuItem(new AbstractAction("Load") {
            private static final long serialVersionUID = 1L;

            public void actionPerformed(ActionEvent arg0) {

            }
        });
        JMenuItem Generate = new JMenuItem(new AbstractAction("Generate Text File") {
            private static final long serialVersionUID = 1L;

            public void actionPerformed(ActionEvent arg0) {

            }
        });
        File.add(Save);
        File.add(Load);
        File.add(Generate);

        JMenuItem Cat = new JMenuItem(new AbstractAction("Add Category") {
            private static final long serialVersionUID = 1L;
            JFrame Cat;

            public void actionPerformed(ActionEvent arg0) {
                Cat = new JFrame("Add Category");
                final JTextField name = new JTextField(15);
                JButton Submit = new JButton(new AbstractAction("Submit") {
                    private static final long serialVersionUID = 1L;

                    public void actionPerformed(ActionEvent arg0) {
                        String n = name .getText();
                        if (n != null) {
                            inv.addCategory(new Category(n));
                            pullThePlug();
                            GUIBuilder.this.Update();
                        }
                    }
                });
                Cat.setLayout(new BorderLayout());
                Cat.add(name, BorderLayout.CENTER);
                Cat.add(Submit, BorderLayout.SOUTH);
                Cat.setSize(250, 150);
                Cat.setVisible(true);
            }
            public void pullThePlug() {
                WindowEvent wev = new WindowEvent(Cat, WindowEvent.WINDOW_CLOSING);
                Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(wev);
            }
        });
        JMenuItem item = new JMenuItem(new AbstractAction("Add Item") {
            private static final long serialVersionUID = 1L;

            public void actionPerformed(ActionEvent arg0) {

            }
        });
        Add.add(Cat);
        Add.add(item);

        frame.setJMenuBar(bar);
        frame.setSize(500, 800);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.add(scroll);

        inv = new Inventory();
    }

    public void Update() {
        for (int i = 0; i < inv.categories.size(); i++) {
            Category cat = inv.categories.get(i);
            JPanel p = new JPanel();
            JTextPane name = new JTextPane();
            name.setText(cat.getName());
            scroll.add(p);
        }
    }
}
提前感谢

您需要将JTextPane名称添加到JPanel p中

在我看来,您似乎还缺少一个主要的方法来构造一个GUIBuilder,但这可能是在另一个文件中,您在您的问题中没有显示的

此外,如果创建空的JScrollPane,则需要通过scrollpane.getViewport.addyourcomponent;添加组件

您还需要一些布局管理。最简单的方法,也可能是您打算做的事情是:

    public void Update() {
        JPanel p = new JPanel();
        for (int i = 0; i < inv.categories.size(); i++) {
            Category cat = inv.categories.get(i);
            JTextPane name = new JTextPane();
            p.add(name);        
            name.setText(cat.getName());                
        }
        scroll.getViewport().add(p);       
    }
您需要将JTextPane名称添加到JPanel p中

在我看来,您似乎还缺少一个主要的方法来构造一个GUIBuilder,但这可能是在另一个文件中,您在您的问题中没有显示的

此外,如果创建空的JScrollPane,则需要通过scrollpane.getViewport.addyourcomponent;添加组件

您还需要一些布局管理。最简单的方法,也可能是您打算做的事情是:

    public void Update() {
        JPanel p = new JPanel();
        for (int i = 0; i < inv.categories.size(); i++) {
            Category cat = inv.categories.get(i);
            JTextPane name = new JTextPane();
            p.add(name);        
            name.setText(cat.getName());                
        }
        scroll.getViewport().add(p);       
    }

最好在显示JFrame之前初始化inv。 您还应该交换语句

frame.setVisible(true);
frame.add(scroll);

因此,在添加JScrollpane后,不需要重新绘制。在组件已经显示的情况下添加组件是相当棘手的。 我真的建议您以frame.setVisibletrue结束您的方法;或者甚至将此语句提取到自己的方法中,该方法在go完成时被调用。 …好吧,那么最好重命名go to init,但那是另一回事;。在我看来,划分构造和显示框架是一种很好的做法。 编辑: 在重新阅读代码之后,我看不到JScrollpane的填充位置。你在哪里添加了一些东西?
此外,您还应该了解as属性不应以大写字母开头。这将大大提高代码的可读性。

最好在显示JFrame之前初始化inv。 您还应该交换语句

frame.setVisible(true);
frame.add(scroll);

因此,在添加JScrollpane后,不需要重新绘制。在组件已经显示的情况下添加组件是相当棘手的。 我真的建议您以frame.setVisibletrue结束您的方法;或者甚至将此语句提取到自己的方法中,该方法在go完成时被调用。 …好吧,那么最好重命名go to init,但那是另一回事;。在我看来,划分构造和显示框架是一种很好的做法。 编辑: 在重新阅读代码之后,我看不到JScrollpane的填充位置。你在哪里添加了一些东西?
此外,您还应该了解as属性不应以大写字母开头。这将大大提高代码的可读性。

什么是库存和类别类?一个提示:从小处着手。如果GUI根本不工作,那么您的代码将非常大。从一个简单的示例开始,这是一个小的受控代码,您可以对其进行推理。因此,您将学习如何使用工作代码以增量方式组装这些小部件以实现所需。Invventory是一个存储类别的类,它存储项目本身,并将显示在gUI中。实际上,目前唯一不起作用的是添加类别:什么是库存和类别类?一个提示:从小处开始。如果GUI根本不工作,那么您的代码将非常大。从一个简单的示例开始,这是一个小的受控代码,您可以对其进行推理。因此,您将学习如何使用工作代码以增量方式组装这些小部件以实现所需。Invventory是一个存储类别的类,它存储项目本身,并将显示在gUI中。实际上,目前唯一不起作用的是Add类别:是的,主方法在另一个文件中,只调用go;哦,是的,那太傻了。谢谢你;好的,即使添加了jtextpane,它仍然没有显示任何内容。如果您错误地使用了JScrollPane,请参阅此答案的新的最后一段;哦,是的,那太傻了。谢谢你;好吧,即使添加了jtextpane,它仍然没有显示任何内容。如果您错误地使用了JScrollPane,请参阅此答案的新的最后一段。好的,非常感谢,我会尝试一下。JScrollPane将填充到Update方法中。我根本不知道这些惯例,所以再次感谢你;好的,非常感谢,我试试看。JScrollPane将填充到Update方法中。我根本不知道这些惯例,所以再次感谢你;