【问题标题】:Create a JPanel from an external class and append it to the primary Jframe从外部类创建 JPanel 并将其附加到主 Jframe
【发布时间】:2015-03-16 09:54:11
【问题描述】:

我正在开发我的第一个 java GUI,已经在这里得到了一些很好的帮助,谢谢大家!

我有一个主类,我想控制和处理我的附加程序,如 tcp 连接等。所以我创建了一个 JFrame,附加了一个 JMenu,主要区域应该根据点击的 JMenuItem 更改其内容,这是一个简单解释。我想在这个主要区域加载的内容是运行我的附加应用程序的 JPanel。当我点击前。菜单项“Neu”我想根据单击的 JMenuItem 在主区域加载特定的 JPanel。我将如何实现它?

这是错误

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at MyFrame$1.actionPerformed(MyFrame.java:48)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.AbstractButton.doClick(Unknown Source)
        at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
        at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown
Source)
        at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$400(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)

这是一个文件中的代码

import javax.swing.*;
import java.awt.*;

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

public class MyFrame extends JFrame { 

private static Container contentContainer;

    public static void main(String[] args) {

        new MyFrame();

    }

    public MyFrame() {

        setTitle("MyFrame");
        setSize(300, 200);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setJMenuBar(createMenu());

        // I GUESS HERE ARE MY TROUBLES //

        MyPanel panel = makePanel(new String("Test oO"));        
        contentContainer = this.getContentPane();

        // I GUESS HERE ARE MY TROUBLES //

        setVisible(true);

    }

    public static JMenuBar createMenu() {

        JMenuBar menuBar = new JMenuBar();
        JMenu menu = new JMenu("Menu");
        JMenuItem menuItem = new JMenuItem("Neu");
        menuItem.setMnemonic(KeyEvent.VK_E);
        menuItem.setToolTipText("Neu");
        menuItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent event) {
                MyPanel dynamicPanel = makePanel(new String("Test haha"));
                contentContainer.add(dynamicPanel);                
            }
        });
        menu.add(menuItem);
        menuBar.add(menu);
        return menuBar;

    }

    public static JDialog makeDialog(String title, String content) {

        JDialog meinJDialog = new JDialog();
        meinJDialog.setVisible(true);
        return meinJDialog;   

    }  

    public static MyPanel makePanel(String config) {

        MyPanel panel = new MyPanel(config);
        return panel;

    }  

}

class MyPanel extends JPanel {

    public MyPanel(String config) {

        setBackground(new Color(77,81,84));
        JButton testButton = new JButton(config);
        add(testButton);

    }

}

非常感谢,并为我糟糕的语言和编码技能感到抱歉:P

【问题讨论】:

  • 1) 为了尽快获得更好的帮助,请发布MCVE(最小完整可验证示例)或SSCCE(简短、自包含、正确示例)。将“外部类”降级为默认访问权限,以便可以将其添加到与其他类相同的源文件中。 2) 见What is a stack trace, and how can I use it to debug my application errors? & What is a Null Pointer Exception, and how do I fix it?
  • 顺便说一句 - // wir benötigen nur.. 非英语评论在面向英语的网站上是噪音。把它们剪掉。
  • 非常感谢。德国 cmets 是不必要的,他们只是为我说(创建这个或那个),因为我可以看到在任何 cmets 中没有什么重要的......我尝试做这个 MCVE 的东西,但我需要一段时间,sry
  • “cmets 是不必要的,它们只适合我..” 对大多数其他人来说都是噪音。 别管他们!
  • 哦,好吧,对不起,我以为你的意思是“翻译它”

标签: java swing nullpointerexception


【解决方案1】:

变化:

Container contentContainer = this.getContentPane(); // Local variable!

收件人:

contentContainer = this.getContentPane(); // Class attribute!

【讨论】:

  • @muni 也可以看看How to Use CardLayout
  • 所以,NullPointerException 似乎解决了。请不要将 SO 误认为是帮助台,它是一个问答网站,每个问题都应该有一个专门的线程。 (骑着马驶入日落,吹着“Happy Trails”的口哨……)
  • @muni 而static 是个坏主意,从长远来看这会伤害你
  • “在哪个地方?” ..什么?你在回复谁?如有疑问,最好添加更多而不是更少的单词。
  • @Andrew Thompson:抱歉,我回答了 MadProgrammers 关于静态的评论。请查看我更新的代码。 MadProgrammer 我有几个静态方法和变量,你指的是哪一个?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多