我正在尝试绘制一个简单的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);
}
我最初在JScrollPane中有JTextarea(认为这是获得我想要工作的滚动的最佳方式)。我删除了导致控制台错误的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中显示)。
感谢您的继续帮助。
答案 0 :(得分:3)
控制台输出正在准确描述这里的错误。
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
部分。