Java GUI - 从另一个方法在新窗口中显示文本

时间:2012-07-07 09:34:28

标签: java swing user-interface jtextcomponent

我有以下界面结构:一个框架,我可以在其中浏览并选择一些文件(在类文件中),当我按下按钮时它会读取文件(在单独的类文件中)并发送它们进行一些处理(在另一个类文件中,第3个)​​。处理本身与此问题无关。

当我按下前面提到的处理按钮时,会启动一个新窗口(框架)。在那个窗口中,我有一个textarea,我想在处理过程中显示一些控制台输出,然后是另一个文本。

绘制第二帧的方法位于第三类文件中,处理一个,如下:

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)。有没有办法解决这个问题?

谢谢!

2 个答案:

答案 0 :(得分:0)

关于你的第一个问题,让textArea成为实例变量。至于你的第二个,我看不出你所显示的代码有什么问题。

答案 1 :(得分:0)

drawScenariocompare方法可以看到文本区域,以便您能够更新它。以下是您可以执行此操作的方法(对代码进行最少的更改)

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. drawScenariocompare以及所有UI元素都可以是非静态的
  2. 创建您自己的框架(扩展JFrame)类,它将封装所有UI元素创建。在drawScenario()中,您可以创建框架并显示它。