添加时出现异常的 CardLayout?
CardLayout with Exception on add?
这是我第一次尝试 运行 使用 Cardlayout 编写代码。
这是 add 方法的异常(空指针)。
但是我也试图弄清楚如何设计卡片布局,例如卡片,并排或一张在另一张下面。我更喜欢后者。
我已经尝试更改我的代码并阅读有关类似问题的其他主题。如有任何误会,敬请谅解。
谢谢
</p>
<pre><code> package jnotizen;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
/**
*
*
*/
public class JNotizen {
/**
* @param args the command line arguments
*/
JFrame f;
BorderLayout bl;
JPanel p;
JPanel start;
JPanel notices;
CardLayout c;
JTextArea ta;
JButton nn;
JButton sv;
JButton sn;
String controls = "Controls";
String noticeBoard = "NoticeBoard";
public static void main(String[] args) {
// TODO code application logic here
SwingUtilities.invokeLater(new Runnable() {
public void run() {
//Turn off metal's use of bold fonts
UIManager.put("swing.boldMetal", Boolean.FALSE);
new JNotizen().startApp();
}
});
}
private void startApp() {
c = new CardLayout();
p = new JPanel(c);
nn = new JButton("New Notice");
sv = new JButton("Save Notice");
sn = new JButton("Search Notice");
ta = new JTextArea("");
start.add(nn); // here I get the NullpointerException?
start.add(sv);
start.add(sn);
notices.add(ta);
p.add(start, controls);
p.add(notices, noticeBoard);
CardLayout cl = (CardLayout)(p.getLayout());
cl.first(p);
BufferedImage img = null;
try {
InputStream inStream = this.getClass().getClassLoader().getResourceAsStream("iconHash2.jpg");
img = ImageIO.read(inStream);
} catch (IOException e) {}
f = new JFrame();
f.getContentPane().add(p, BorderLayout.CENTER);
f.setTitle("NoticeBoard");
f.setIconImage(img);
f.setSize(450,550);
f.setResizable(false);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
JPanel start
从未初始化。因此它在 start 变量上调用一个空指针。在添加组件之前尝试初始化 JPanel start
。
这是我第一次尝试 运行 使用 Cardlayout 编写代码。 这是 add 方法的异常(空指针)。 但是我也试图弄清楚如何设计卡片布局,例如卡片,并排或一张在另一张下面。我更喜欢后者。 我已经尝试更改我的代码并阅读有关类似问题的其他主题。如有任何误会,敬请谅解。
谢谢
</p>
<pre><code> package jnotizen;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
/**
*
*
*/
public class JNotizen {
/**
* @param args the command line arguments
*/
JFrame f;
BorderLayout bl;
JPanel p;
JPanel start;
JPanel notices;
CardLayout c;
JTextArea ta;
JButton nn;
JButton sv;
JButton sn;
String controls = "Controls";
String noticeBoard = "NoticeBoard";
public static void main(String[] args) {
// TODO code application logic here
SwingUtilities.invokeLater(new Runnable() {
public void run() {
//Turn off metal's use of bold fonts
UIManager.put("swing.boldMetal", Boolean.FALSE);
new JNotizen().startApp();
}
});
}
private void startApp() {
c = new CardLayout();
p = new JPanel(c);
nn = new JButton("New Notice");
sv = new JButton("Save Notice");
sn = new JButton("Search Notice");
ta = new JTextArea("");
start.add(nn); // here I get the NullpointerException?
start.add(sv);
start.add(sn);
notices.add(ta);
p.add(start, controls);
p.add(notices, noticeBoard);
CardLayout cl = (CardLayout)(p.getLayout());
cl.first(p);
BufferedImage img = null;
try {
InputStream inStream = this.getClass().getClassLoader().getResourceAsStream("iconHash2.jpg");
img = ImageIO.read(inStream);
} catch (IOException e) {}
f = new JFrame();
f.getContentPane().add(p, BorderLayout.CENTER);
f.setTitle("NoticeBoard");
f.setIconImage(img);
f.setSize(450,550);
f.setResizable(false);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
JPanel start
从未初始化。因此它在 start 变量上调用一个空指针。在添加组件之前尝试初始化 JPanel start
。