添加了例外的CardLayout?

时间:2016-06-18 09:12:32

标签: java cardlayout

这是我第一次尝试使用Cardlayout运行代码。 它是add方法的异常(nullpointer)。 然而,我还试图弄清楚如何设计卡布局,例如卡片,并排或一个在另一个之下。我更喜欢后者。 我已经尝试过更改我的代码并阅读有关类似问题的其他主题。对不起有任何误解。

谢谢

     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);

 }
}

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); } }

1 个答案:

答案 0 :(得分:1)

JPanel start从未初始化。因此它在start变量上调用一个空指针。在添加组件之前尝试初始化JPanel start