gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:53:42 26 4
gpt4 key购买 nike

我正在尝试绘制一个简单的 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)

编辑:上面添加了主要内容。

我的 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 添加到内容 Pane 中,但是 panel code> 本身是 Main extends JFrame 的一个实例。

您应该完全删除对外部框架的任何引用,然后将窗口监听器添加到Main框架中,即主代码简化为类似

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

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

关于简单 gui 中的 java.awt.Container.checkNotAWindow 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15948848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com