java.awt.Container.checkNotAWindow错误在简单的gui



我试图绘制一个简单的GUI(在eclipse中创建的windowbuilder),我想有2个按钮和它们之间的一个可滚动的文本区域。我已经创建了以下代码来实现上述目标:

public class Main extends JFrame implements ActionListener{
    public Font font; //used for the font file
    public JTextArea txtDataWillBe;
     public Main() throws FontFormatException, IOException{
        setTitle("Main title ");
        setBounds(100, 100, 1200, 600);
        getContentPane().setLayout(null);
        txtDataWillBe = new JTextArea();
        txtDataWillBe.setText("Your data will display here");
        txtDataWillBe.setFont(new Font("Droid Sans", Font.BOLD, 18));
        txtDataWillBe.setEditable(false);
        txtDataWillBe.setColumns(1);
        txtDataWillBe.setBounds(0, 40, 919, 484);
        getContentPane().add(txtDataWillBe);
        JButton button = new JButton("CLICK TO OPEN");
        button.setBounds(0, 0, 940, 40);
        button.setFont(new Font("Coalition", Font.PLAIN, 18));
        getContentPane().add(button);
        JButton btnPrint = new JButton("PRINT");
        btnPrint.setBounds(0, 531, 940, 40);
        btnPrint.setFont(new Font("Coalition", Font.PLAIN, 18));
        getContentPane().add(btnPrint);
    }
        private final String JTextFile = null;
        JFileChooser chooser;
        String choosertitle;
        public static File deletefile; 
编辑:

 public static void main(String s[]) {
            JFrame frame = new JFrame("Reader");
            Main panel = null;
            try {
                panel = new Main();
            } catch (FontFormatException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            frame.addWindowListener(
              new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    File deleteme = new File (deletefile + "mx.txt");
                    deleteme.delete();
                  System.exit(0);
                  }
                }
              );
            frame.getContentPane().add(panel,"Center");
            frame.setSize(panel.getPreferredSize());
            frame.setVisible(true);
            }

我最初有一个JTextarea在JScrollPane(认为这是最好的方式来获得我想要的滚动工作)。我删除了导致控制台错误的JScrollPane,但我仍然得到错误。

控制台输出为:

Exception in thread "main" java.lang.IllegalArgumentException: adding a window to a container
    at java.awt.Container.checkNotAWindow(Container.java:439)
    at java.awt.Container.addImpl(Container.java:1035)
    at java.awt.Container.add(Container.java:923)

编辑:上面添加的Main。

我的GUI做错了什么?
我是否需要JScrollPane和JTextArea来启用加载文本的垂直滚动?

谢谢你的帮助;

安迪

编辑:

我已经按照下面的建议编辑了,所以我的代码现在是:

 public Main() throws FontFormatException, IOException{

        JFrame frame = new JFrame("Reader ");
          frame.addWindowListener(
                  new WindowAdapter() {
                    public void windowClosing(WindowEvent e) {
                        File deleteme = new File (deletefile + "mx.txt");
                        deleteme.delete();
                      System.exit(0);
                      }
                    }
                  );
                frame.getContentPane().add(panel,"Center");
                frame.setSize(getPreferredSize());
                frame.setVisible(true);

其余的代码和以前一样,但所有我得到的显示是一个空白的灰色框架没有任何我的组件(尽管它们都显示在windowbuilder)。

感谢您的持续帮助

控制台输出准确地描述了这里的错误。

IllegalArgumentException: adding a window to a container

frame.getContentPane().add(panel,"Center");行中,您将panel添加到您的内容窗格中,但panel本身是Main extends JFrame的一个实例。

你应该删除所有对外部框架的引用,只将窗口侦听器添加到Main框架,即主代码减少到类似

的内容
JFrame frame = new Main();
frame.addWindowListener( ... );
frame.setVisible(true);

您可能还想将addWindowListener部分移动到Main类中。

相关内容

  • 没有找到相关文章

最新更新