我试图绘制一个简单的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
类中。