次のコードでは、フルスクリーンメニューを設計しようとしています。これを行うには、私は2つのJPanels
を使用することが最善であると思った。私の問題は、JPanels
の間で切り替えるときにjava.lang.NullPointerException
となる。例外は、この行である101行目で発生することを示しています。 m.getMainWindow().getContentPane().setComponentZOrder(m.getOverlay(), 0);
元々私は問題がインスタンスの問題であると信じていました。しかし、public class Menu
の末尾にあるmain
ボイドに使用されているmenu
変数を渡すと、関連するすべてのメソッドが引き続き発生します。私は自分の問題を解決する助けに感謝します。nullポインタ正しい変数を渡しても例外がまだ発生しています
コード
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import net.miginfocom.swing.MigLayout;
public class Menu {
JFrame myMainWindow = new JFrame("Menu test");
GridBagConstraints c;
JLayeredPane lP;
MyFirstPanel fP;
MyOverlay oL;
MigLayout baseLayout;
MigLayout overlayLayout;
private void runGUI(Menu m) {
myMainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myMainWindow.setLayout(new GridBagLayout());
setContraints();
createPanels(m);
myMainWindow.getContentPane().add(fP, c);
myMainWindow.getContentPane().add(oL, c);
myMainWindow.pack();
myMainWindow.setVisible(true);
}
private void setContraints() {
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.weightx = 1;
c.weighty = 1;
c.fill = GridBagConstraints.BOTH;
}
private void createPanels(Menu m) {
createFirstPanel(m);
createOverlay();
}
private void createFirstPanel(Menu m) {
baseLayout = new MigLayout("", "", "");
fP = new MyFirstPanel(baseLayout, m);
}
private void createOverlay() {
overlayLayout = new MigLayout("", "", "");
oL = new MyOverlay(overlayLayout, true);
}
public JPanel getOverlay() {
return oL;
}
public JFrame getMainWindow() {
return myMainWindow;
}
public static void main(String[] args) {
Menu menu = new Menu();
menu.runGUI(menu);
}
}
class MyFirstPanel extends JPanel {
MyFirstPanel(MigLayout layout, Menu mM) {
setLayout(layout);
setBackground(Color.RED);
setPreferredSize(new Dimension(600, 600));
add(new JLabel("hiasdfadsf"), "wrap");
JButton jb = new JButton("Press Me");
jb.addActionListener(new CustomActionListener(mM));
add(jb);
}
}
class MyOverlay extends JPanel {
MyOverlay(MigLayout layout, boolean visible) {
setBackground(Color.GREEN);
setPreferredSize(new Dimension(600, 600));
add(new JLabel("hi"));
setVisible(visible);
}
}
class CustomActionListener implements ActionListener {
Menu m;
public CustomActionListener(Menu mM) {
this.m = mM;
m.getMainWindow().getContentPane().setComponentZOrder(m.getOverlay(), 0);
}
public void actionPerformed(ActionEvent e) {
m.getMainWindow().getContentPane().setComponentZOrder(m.getOverlay(), 0);
}
}
例外
Exception in thread "main" java.lang.NullPointerException
at java.awt.Container.setComponentZOrder(Container.java:760)
at packages.CustomActionListener.<init>(Menu.java:101)
at packages.MyFirstPanel.<init>(Menu.java:75)
at packages.Menu.createFirstPanel(Menu.java:44)
at packages.Menu.createPanels(Menu.java:38)
at packages.Menu.runGUI(Menu.java:21)
at packages.Menu.main(Menu.java:64)
[NullPointerExceptionとは何か、それを修正するにはどうすればいいですか?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix -it) – Frakcool
ZOrderで遊ぼうとしないでください。パネルを交換する場合は、[カードレイアウト](http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html)を使用します。また、コードを投稿するときには、JDKクラスのみが含まれている必要があります。 MigLayoutはJDKの一部ではありません。コードをテストすることはできません。 – camickr
@camickr情報をありがとう、私は次回にmigレイアウトを残しておきます – Dan