0

私は次のインターフェース構造を持っています: ボタンを押すと、いくつかのファイル (クラスファイル内) を参照して選択できるフレームで、ファイル (別のクラスファイル内) を読み取り、何らかの処理のためにそれらを送信します (別のクラスファイル内)。クラスファイル、3番目)。処理自体は、この質問には関係ありません。

先ほどの処理ボタンを押すと、新しいウィンドウ(フレーム)が立ち上がります。そのウィンドウには、処理中にコンソール出力を表示し、次に別のテキストを表示するテキストエリアがあります。

2 番目のフレームを描画するメソッドは、処理ファイルである 3 番目のクラス ファイルに次のように配置されています。

public static void drawScenario(){
    final JPanel mainPanel2 = new JPanel();
    JPanel firstLine = new JPanel();
    JPanel secLine = new JPanel();

    mainPanel2.setLayout(new BoxLayout(mainPanel2, BoxLayout.Y_AXIS));
    mainPanel2.setBorder(new EmptyBorder(new Insets(5, 5, 5, 5)));
    mainPanel2.add(Box.createVerticalGlue());

    firstLine.setLayout(new BoxLayout(firstLine, BoxLayout.X_AXIS));
    firstLine.setBorder(new EmptyBorder(new Insets(5, 5, 5, 5)));
    firstLine.add(Box.createVerticalGlue());

    secLine.setLayout(new BoxLayout(secLine, BoxLayout.X_AXIS));
    secLine.setBorder(new EmptyBorder(new Insets(5, 5, 5, 5)));
    secLine.add(Box.createVerticalGlue());

    JTextArea textArea = new JTextArea("", 10, 40);
    textArea.setLineWrap(true);
    JScrollPane scrollPane = new JScrollPane(textArea); 
    scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    textArea.setEditable(false);

    JLabel label1 = new JLabel("Processing results:");

    firstLine.add(Box.createRigidArea(new Dimension(5,0)));
    firstLine.add(label1);
    firstLine.add(Box.createRigidArea(new Dimension(5,0)));

    secLine.add(textArea);
    secLine.add(Box.createRigidArea(new Dimension(5,0)));

    mainPanel2.add(firstLine);
    mainPanel2.add(Box.createRigidArea(new Dimension(0, 30)));
    mainPanel2.add(secLine);
    mainPanel2.add(Box.createRigidArea(new Dimension(0, 20)));

    JFrame frame = new JFrame("Test results");
    frame.setSize(400, 300);
    frame.setLocation(50,50);
    frame.setVisible( true );
    frame.add(mainPanel2);
    frame.pack();

}

処理メソッド ( public static void compare(String txt1, String txt2) ) も同じファイルの drawScenario() メソッドの下にあります。私の質問は、compare() から drawScenario() メソッドの TextArea にテキストを出力するにはどうすればよいですか?

また、compare() の前に drawScenario() を呼び出しますが、処理中にウィンドウは完全には描画されません (黒い列が表示され、その中に TextArea が描画されません)。それを修正する方法はありますか?

ありがとうございました!

4

2 に答える 2

0

textArea最初の質問については、代わりにインスタンス変数にしましょう。2番目については、あなたが示したコードに問題はありません。

于 2012-07-07T09:44:42.750 に答える
0

テキスト領域は、更新できるようにdrawScenarioおよびメソッドから表示される必要があります。compareこれを行う方法は次のとおりです(コードへの変更を最小限に抑えて)

public class MyClass {
     private static JTextArea textArea = new JTextArea("", 10, 40);
     public void static drawScenario(){
         // ...
     }
     public static void compare(String txt1, String txt2){
         textArea.setText("here is some text...");
     }    
}

要件を適切に実装したい場合は、次のようにする必要があります。

  1. drawScenarioおよびすべてのcompareUI 要素を非静的にすることができます
  2. JFrameすべての UI 要素の作成をカプセル化する独自のフレーム (を拡張する) クラスを作成します。drawScenario()フレームを作成して表示するだけです。
于 2012-07-07T10:08:31.607 に答える