我有以下界面结构:一个框架,我可以在其中浏览并选择一些文件(在类文件中),当我按下按钮时它会读取文件(在单独的类文件中)并发送它们进行一些处理(在另一个类文件中,第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)。有没有办法解决这个问题?
谢谢!
答案 0 :(得分:0)
关于你的第一个问题,让textArea
成为实例变量。至于你的第二个,我看不出你所显示的代码有什么问题。
答案 1 :(得分: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...");
}
}
现在,如果您想要正确实施您的要求,您应该这样做:
drawScenario
和compare
以及所有UI元素都可以是非静态的JFrame
)类,它将封装所有UI元素创建。在drawScenario()
中,您可以创建框架并显示它。