0

シンプルな 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 に表示されます)。

いつもお世話になっております。

4

1 に答える 1

3

コンソール出力は、ここで何が間違っているかを正確に説明しています。

IllegalArgumentException: adding a window to a container

コンテンツ ペインにframe.getContentPane().add(panel,"Center");追加する行では、それ自体が のインスタンスです。panelpanelMain extends JFrame

外側のフレームへの参照をすべて削除し、Mainフレームにウィンドウ リスナーを追加するだけです。つまり、メイン コードは次のようになります。

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

addWindowListenerclass 内でパーツを移動することもできますMain

于 2013-04-11T12:51:12.430 に答える