单击按钮时将JTextField添加到JPanel(IntelliJ GUI Designer)

时间:2015-08-01 18:41:09

标签: java swing intellij-idea jtextfield repaint

我意识到之前已经问过这个问题,但我尝试过的解决方案都没有。我试图根据用户输入交换JPanel中的内容。 例如,我想删除两个按钮并添加几个JTextField。

无论我做什么,我都会得到一个空指针异常。我尝试在窗体上创建元素并简单地隐藏它(setVisible(false))并将其设置为在按钮单击时可见而不是创建它。那也返回了一个nullptr。

以下是该按钮的动作事件监听器:

 importOnlineButton.addActionListener(new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent event) {
            mainContentPanel.remove(importOfflineButton);
            mainContentPanel.remove(importOnlineButton);

            JTextField test = new JTextField(1);
            mainContentPanel.add(test);
            //pack();
            revalidate();
            repaint();
         }
      });

这是我的完整代码:

package com.arcologydesigns.Views;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.net.URL;

import static java.awt.event.ActionEvent.*;

/**
 * EducatorMainForm created by Borislav S. on 7/11/2015 @ 9:57 PM.
 */
public class EducatorMainForm extends JFrame {

   private ImageIcon img;
   private JPanel educatorMainPanel;
   private JLabel userIdLabel;
   private JButton importOnlineButton;
   private JButton importOfflineButton;
   private JPanel mainContentPanel;
   private JPanel userIdPanel;
   private JLabel helpText1;
   private JLabel helpText2;
   private String imgUrl;
   private JPopupMenu pmenu;

   private class MenuItemAction extends AbstractAction {

      public MenuItemAction(String text, Icon icon,
                            Integer mnemonic) {
         super(text);

         putValue(SMALL_ICON, icon);
         putValue(MNEMONIC_KEY, mnemonic);
      }

      @Override
      public void actionPerformed(ActionEvent e) {

         System.out.println(e.getActionCommand());
      }
   }

   public EducatorMainForm(char userType) {
      educatorMainPanel.setSize(300, 300);
      //setLocationRelativeTo(null);

      switch (userType) {
         case 'S':
            imgUrl = "images/educator_logo_student.jpg";
            break;
         case 'I':
            imgUrl = "images/educator_logo_instructor.jpg";
            break;
         case 'G':
            imgUrl = "images/educator_logo_guest.jpg";
            break;
         default:
            imgUrl = "images/educator_logo_guest.jpg";
            System.out.print("Invalid user type.");
            break;
      }

      createAndShowGUI();
      createPopupMenu();
      createMenuBar();


      importOnlineButton.addActionListener(new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent event) {
            mainContentPanel.remove(importOfflineButton);
            mainContentPanel.remove(importOnlineButton);

            JTextField test = new JTextField(1);
            mainContentPanel.add(test);
            pack();

            revalidate();
            repaint();

         }
      });
   }

   private void createAndShowGUI() {

      // Set title and default close operation
      setTitle("Educator Productivity Toolkit - EPT v0.1");
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


      // Set a background for JFrame
      ClassLoader cldr = this.getClass().getClassLoader();

      URL imageURL = cldr.getResource(imgUrl);
      if (imageURL != null) {
         img = new ImageIcon(imageURL);
      }

      setContentPane(new JLabel(img));

      // Set some layout, say FlowLayout
      setLayout(new FlowLayout());

      // Set the background, black with 125 as alpha value. This is less transparent
      if(educatorMainPanel != null) {
         educatorMainPanel.setBackground(new Color(33, 71, 116, 165));

         // Set some size to the panels
         educatorMainPanel.setPreferredSize(new Dimension(1920, 1080));
         //p2.setPreferredSize(new Dimension(250,150));

         // Add the panels to the JFrame
         add(educatorMainPanel);
      }

      // Set the size of the JFrame and make it visible
      setExtendedState(JFrame.MAXIMIZED_BOTH);  // set to full screen
      setVisible(true);
   } // end createAndShowGUI()

   private void createPopupMenu() {

      pmenu = new JPopupMenu();

      JMenuItem maxMi = new JMenuItem("Maximize");
      maxMi.addActionListener(new ActionListener() {

         @Override
         public void actionPerformed(ActionEvent e) {

            if (getExtendedState() != JFrame.MAXIMIZED_BOTH) {
               setExtendedState(JFrame.MAXIMIZED_BOTH);
            }

         }
      });

      pmenu.add(maxMi);

      JMenuItem quitMi = new JMenuItem("Quit");
      quitMi.addActionListener(new ActionListener() {

         @Override
         public void actionPerformed(ActionEvent e) {
            System.exit(0);
         }
      });

      /**
       * Lambda expression alternative to above function:
       * quitMi.addActionListener((e) -> { System.exit(0); });
       * Only available in Java 8
       * */

      pmenu.add(quitMi);

      addMouseListener(new MouseAdapter() {

         @Override
         public void mouseReleased(MouseEvent e) {

            if (e.getButton() == MouseEvent.BUTTON3) {
               pmenu.show(e.getComponent(), e.getX(), e.getY());
            }
         }
      });
   }

   private void createMenuBar() {
      Icon iconNew =  UIManager.getIcon("FileChooser.newFolderIcon");
      Icon iconSave =  UIManager.getIcon("FileView.floppyDriveIcon");
      Icon iconOpen =  UIManager.getIcon("Tree.timeFactor");
      Icon iconExit = UIManager.getIcon("InternalFrame.closeIcon");

      Icon iconOptions = UIManager.getIcon("ToolBar.handleIcon");


      JMenuBar menubar = new JMenuBar();

      JMenu fileMenu = new JMenu("File");
      fileMenu.setMnemonic(KeyEvent.VK_F);

      JMenuItem newMi = new JMenuItem(new MenuItemAction("New", iconNew, KeyEvent.VK_N));
      JMenuItem openMi = new JMenuItem(new MenuItemAction("Open", iconOpen, KeyEvent.VK_O));
      JMenuItem saveMi = new JMenuItem(new MenuItemAction("Save", iconSave, KeyEvent.VK_S));
      JMenuItem optionsMi = new JMenuItem(new MenuItemAction("Options", iconOptions, KeyEvent.VK_O));

      JMenuItem exitMi = new JMenuItem("Exit", iconExit);
      exitMi.setMnemonic(KeyEvent.VK_E);
      exitMi.setToolTipText("Exit application");
      exitMi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, CTRL_MASK));

      exitMi.addActionListener(new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent event) {
            System.exit(0);
         }
      });

      fileMenu.add(newMi);
      fileMenu.add(openMi);
      fileMenu.add(saveMi);
      fileMenu.addSeparator();
      fileMenu.add(exitMi);

      JMenu viewMenu = new JMenu("View");
      viewMenu.setMnemonic(KeyEvent.VK_V);

      JMenu toolsMenu = new JMenu("Tools");
      toolsMenu.add(optionsMi);
      optionsMi.addActionListener(new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent event) {
            OptionsForm o = new OptionsForm();
         }
      });

      JMenu helpMenu = new JMenu("Help");

      JCheckBoxMenuItem sbarMi = new JCheckBoxMenuItem("Show statubar");
      sbarMi.setMnemonic(KeyEvent.VK_S);
      sbarMi.setDisplayedMnemonicIndex(5);
      sbarMi.setSelected(true);

      sbarMi.addItemListener(new ItemListener() {

         @Override
         public void itemStateChanged(ItemEvent e) {

            if (e.getStateChange() == ItemEvent.DESELECTED) {
               helpText1.setVisible(false);
               helpText2.setVisible(false);
            } else {
               helpText1.setVisible(true);
               helpText2.setVisible(true);
            }

         }

      });

      viewMenu.add(sbarMi);
      menubar.add(fileMenu);
      menubar.add(viewMenu);
      menubar.add(toolsMenu);
      menubar.add(Box.createHorizontalGlue());
      menubar.add(helpMenu);

      setJMenuBar(menubar);
   }

   public void setUserIdLabel(String _userIdLabel) {
      this.userIdLabel.setText(_userIdLabel);
   }

   public void setImageURL(String _imageURL) {
      imgUrl = _imageURL;
   }

} // end class EducatorMainForm

这是例外(空指针):

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to com.intellij.uiDesigner.core.GridConstraints
    at com.intellij.uiDesigner.core.GridLayoutManager.addLayoutComponent(GridLayoutManager.java:133)
    at java.awt.Container.addImpl(Container.java:1120)
    at java.awt.Container.add(Container.java:966)
    at com.arcologydesigns.Views.EducatorMainForm$1.actionPerformed(EducatorMainForm.java:82)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6505)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
    at java.awt.Component.processEvent(Component.java:6270)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4861)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:708)
    at java.awt.EventQueue$4.run(EventQueue.java:706)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

0 个答案:

没有答案