[英]Create a JPanel from an external class and append it to the primary Jframe
我正在第一個Java GUI上工作,並且已經在這里獲得了一些很好的幫助,謝謝大家!
我有一個主類,我想從中控制和處理我的其他程序,如tcp連接等。因此,我創建了一個JFrame,附加了JMenu,並且主要區域應根據所敲擊的JMenuItem來更改其內容,這就是一個簡單的解釋。 我要在此主要區域中加載的內容是正在運行其他應用程序的JPanels。 當我單擊前。 菜單項“ 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
更改:
Container contentContainer = this.getContentPane(); // Local variable!
至:
contentContainer = this.getContentPane(); // Class attribute!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.