0

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

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

绘制第二帧的方法位于第 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改为实例变量。至于您的第二个,我认为您显示的代码没有任何问题。

于 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 回答