【问题标题】:Java. Exception in thread "main" java.lang.IllegalArgumentException: adding a window to a container爪哇。线程“主”java.lang.IllegalArgumentException 中的异常:向容器添加窗口
【发布时间】:2013-11-27 06:01:33
【问题描述】:

当我尝试运行我的程序时,我不断收到以下错误:

线程“主”java.lang.IllegalArgumentException 中的异常:添加 容器的窗口 java.awt.Container.checkNotAWindow(Container.java:483) 在 java.awt.Container.addImpl(Container.java:1084) 在 javax.swing.JTabbedPane.insertTab(JTabbedPane.java:724) 在 javax.swing.JTabbedPane.addTab(JTabbedPane.java:767) 在 CourserWindow.(CourserWindow.java:40) 在 CourserWindow.main(CourserWindow.java:58)

这是我的文件:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.net.*;
import java.io.*;

public class CourserWindow extends JFrame
{
    private JFrame panel;

    public CourserWindow()
    {
  //Set default window size
  final int WINDOW_WIDTH = 500;
  final int WINDOW_HEIGHT = 400;

  setSize(WINDOW_WIDTH, WINDOW_HEIGHT);

  //Set title of window
  setTitle("Courser");

  //set close button functionality      
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  //Add grid layout for left/right areas
  setLayout(new GridLayout(1, 2));

  //create left side
  JTabbedPane tabbedPane = new JTabbedPane();

  //create icons for tabs
  ImageIcon browserIcon = new ImageIcon("Icons/BrowserIcon.jpg");
  ImageIcon addressIcon = new ImageIcon("Icons/AddressBookIcon.jpg");

  EditorPaneFrame panel1 = Browser();

  //add tabs
  //tabbedPane.addTab("Address Book", addressIcon, panel1, "Contact info");
  tabbedPane.addTab("Browser", browserIcon, panel1, "Browse the web");

  panel = new JFrame();

  setVisible(true);
  }

  public EditorPaneFrame Browser()
  {
  EditorPaneFrame browser = new EditorPaneFrame();

  return browser;
  }

  public static void main(String[] args)
  {
     new CourserWindow();
  }
 }

package editorPane;  
 import java.awt.*;
 import java.awt.event.*;   
 import java.io.*;   
 import java.util.*;   
 import javax.swing.*;   
 import javax.swing.event.*;   
/** 
  * This frame contains an editor pane, a text field and button to enter a URL and     load a document, 
  * and a Back button to return to a previously loaded document. 
  */

public class EditorPaneFrame extends JPanel
{ 
       private static final int DEFAULT_WIDTH = 600; 
       private static final int DEFAULT_HEIGHT = 400; 
       public EditorPaneFrame() 
      { 
            setSize( DEFAULT_WIDTH, DEFAULT_HEIGHT); 
            final Stack < String > urlStack = new Stack < >(); 
             final JEditorPane editorPane = new JEditorPane(); 
             final JTextField url = new JTextField( 30); 

            // set up hyperlink listener 
             editorPane.setEditable( false); 
             editorPane.addHyperlinkListener( new HyperlinkListener() 
                  { 
                         public void hyperlinkUpdate( HyperlinkEvent event) 
                        { 
                               if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) 
                              { 
                                     try 
                                    { 
                                          // remember URL for back button 
                                           urlStack.push( event.getURL(). toString()); 

                                          // show URL in text field 
                                           url.setText( event.getURL(). toString()); 
                                           editorPane.setPage( event.getURL()); 
                                    } 
                                     catch (IOException e) 
                                    { 
                                           editorPane.setText(" Exception: " + e); 
                                    } 
                              } 
                        } 
                  }); 

            // set up checkbox for toggling edit mode 
            final JCheckBox editable = new JCheckBox();
            editable.addActionListener( new ActionListener() 
                  { 
                        public void actionPerformed( ActionEvent event) 
                        { 
                               editorPane.setEditable( editable.isSelected()); 
                        } 
                  }); 

            // set up load button for loading URL 
             ActionListener listener = new ActionListener() 
                  { 
                         public void actionPerformed( ActionEvent event) 
                        { 
                               try 
                              { 
                                    // remember URL for back button 
                                     urlStack.push( url.getText()); 
                                     editorPane.setPage( url.getText()); 
                              } 
                               catch (IOException e) 
                              { 
                                     editorPane.setText(" Exception: " + e); 
                              } 
                        } 
                }; 
           JButton loadButton = new JButton(" Load"); 
           loadButton.addActionListener( listener); 
           url.addActionListener( listener); 

 // set up back button and button action 
           JButton backButton = new JButton(" Back"); 
           backButton.addActionListener( new ActionListener() 
                { 
                       public void actionPerformed( ActionEvent event) 
                      { 
                             if (urlStack.size() <= 1) return; 
                             try 
                            { 
                                  // get URL from back button 
                                   urlStack.pop();

                                 // show URL in text field 
                                   String urlString = urlStack.peek(); 
                                   url.setText( urlString); 
                                 editorPane.setPage( urlString); 
                          } 
                           catch (IOException e) 
                          { 
                                 editorPane.setText(" Exception: " + e); 
                          } 
                    } 
              }); 
         add( new JScrollPane( editorPane), BorderLayout.CENTER); 

        // put all control components in a panel 
         JPanel panel = new JPanel(); 
         panel.add( new JLabel(" URL")); 
         panel.add( url); 
         panel.add( loadButton); 
         panel.add( backButton); 
         panel.add( new JLabel(" Editable")); 
         panel.add( editable); 
         add( panel, BorderLayout.SOUTH); 

         setVisible(true);
  }      
 }

【问题讨论】:

  • 如需尽快获得更好的帮助,请发布SSCCE。实际上,该代码无法编译,更不用说引发运行时异常了。
  • 它编译得很好,但会产生运行时错误

标签: java swing layout jpanel


【解决方案1】:

在您的编辑器窗格中,您正在扩展 JPanel 并在构造函数中 public EditorPaneFrame() 您在同一个 JPanel 中添加了一个新的 JPanel 对象。

add( panel, BorderLayout.SOUTH); 

你应该extend JFrame 然后它会工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 2019-01-23
    • 1970-01-01
    • 2016-02-16
    • 2013-10-13
    • 2017-11-18
    相关资源
    最近更新 更多