3

これが私の問題です。私はちょうど彼女の誕生日のために友人のために素敵な小さなアプリケーションを書こうとしています。問題は、プログラムを実行すると、最初は空白のGUIが表示されることです。しかし、ウィンドウの境界を少しでも調整すると、想定どおりに問題が発生します。

これは、を入れた後にのみ発生しましたJTextArea。テキストを表示するだけです。テキストの入力には使用されません。私が間違っていることについて何か提案はありますか?私は境界を越えていJFrameますか?

助けてくれてありがとう。

import javax.swing.*;
import java.awt.*;

public class Birthday {

  private JFrame mainFrame;
  private JPanel mainPanel;
  private JPanel labelPanel;
  private JPanel buttonPanel;
  private JButton story;
  private JButton misc;
  private JButton next;
  private JLabel mainLabel;

  private JFrame miscFrame;
  private JPanel miscPanel;
  private JLabel miscLable;

  private JTextArea text;

  public Birthday(){
    gui();
  }

  public static void main(String [] args){
    Birthday b = new Birthday();

  }

  public void gui(){
    mainFrame = new JFrame("The Buttercup Project"); //main window
    mainFrame.setVisible(true);
    mainFrame.setSize(550,650);
    //mainFrame.setResizable(false);
    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    text = new JTextArea(30,35);

    mainPanel = new JPanel(); //displays content in window
    mainPanel.setBackground(Color.YELLOW);
    mainPanel.setVisible(true);
    mainPanel.add(text);

    labelPanel = new JPanel();
    labelPanel.setVisible(true);
    labelPanel.setBackground(Color.LIGHT_GRAY);

    buttonPanel = new JPanel();
    buttonPanel.setVisible(true);
    buttonPanel.setBackground(Color.LIGHT_GRAY);


    story = new JButton("Story"); //button
    misc = new JButton("?");
    next = new JButton ("Next Story");
    mainLabel = new JLabel("The Buttercup Project"); //label


    labelPanel.add(mainLabel); //adds buttons to panel
    buttonPanel.add(story, BorderLayout.CENTER);
    buttonPanel.add(misc, BorderLayout.CENTER);
    buttonPanel.add(next, BorderLayout.CENTER);

    mainFrame.add(labelPanel,BorderLayout.NORTH );
    mainFrame.add(buttonPanel, BorderLayout.AFTER_LAST_LINE);

    mainFrame.add(mainPanel,BorderLayout.CENTER );  //put panel inside of frame

  }

}
4

2 に答える 2

4

メソッドmainFrame.setVisible(true)の最後にを1回呼び出します。gui()他のすべてのオカレンスを削除します。

于 2012-09-19T00:24:04.627 に答える
4

各パネルでsetVisible()を呼び出す必要はありません。それらを含むJFrameに対して一度だけ実行する必要があります。また、すべてのコンポーネントが追加された後にこれを行う必要があります。また、正しいサイズが計算されるように、必ずmainFrame.pack()を呼び出してください。

于 2012-09-19T00:24:48.440 に答える