JTextArea.append不显示

时间:2014-10-16 08:41:50

标签: java swing jtextarea

我试图将数组的内容写入JTextArea。我已经尝试了所有我能想到的东西,而且我无法理解在这里工作的东西。我从我的代码中删除了不必要的东西,这里是两个相关的类文件:

主要课程:

package irclogtest;

public class BriBotMain {

public static void main(String args[]) throws Exception {


    boolean startup = true;


    //frame test launch
    BriDisplayGUI data = new BriDisplayGUI(startup);
    data.irclog.append("BriBot Startup Successful!" + "\n");

    //example access through function when startup is false (only in main class for sample code to demonstrate issue)
    try { 
     BriDisplayGUI data2 = new BriDisplayGUI(false); //tells us which class we're accessing 

     String[] textForGUI = new String[2]; //tells us the array has 2 lines
     textForGUI[0] = "this is the first line"; //set the first line of the array to this text
     textForGUI[1] = "this is the second";

     data2.arrayToDisplay(textForGUI); //appends contents of array to text window
    }
    catch(Exception e) {
       System.out.println(e);
    }
}

}

GUI显示类:

package irclogtest;


import java.awt.event.*;
import java.io.IOException;

import javax.swing.*;


public class BriDisplayGUI extends JFrame implements ActionListener {

private static final long serialVersionUID = -7811223081379421773L;



String file_name = "C:/Bribot/logfile.txt";

//these lines create the objects we use
JFrame frame = new JFrame();
JPanel pane = new JPanel();
JButton pressme = new JButton("Click here");
JButton pressme2 = new JButton("Also here");
JTextArea irclog = new JTextArea( 20, 70);
JScrollPane scrollirc = new JScrollPane(irclog);

public BriDisplayGUI(boolean startup) { //startup function, opens and sets up the window

    if(startup == true){
        frame.setTitle("Bribot Test Frame"); frame.setBounds(100,100,840,420);      //sets title of window, sets position and size of window
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);       //tells program to end on window close
        frame.add(pane);        //adds the main display pane to the window   
        //panel customization goes here
        pressme.addActionListener(this);
        pane.add(pressme);
        pressme2.addActionListener(this);
        pane.add(pressme2);
        pressme.requestFocusInWindow();
        irclog.setEditable(false);
        scrollirc.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        pane.add(scrollirc);
        irclog.setLineWrap(true);
        irclog.setWrapStyleWord(true);
        //pane.add(inputthing);
        frame.setVisible(true);
    } else {
        System.out.println("Display Class Called");
    }

}




public void arrayToDisplay(String[] text) throws IOException {

   int i;
   for ( i=0; i < text.length; i++) {
       irclog.append( text[i] + "\n");
       System.out.println( i + ": " + text[i]);
   }
}
public void singleToDisplay(String text) throws IOException {

    irclog.append(text + "\n");
    System.out.println(text);
}


//basic event handler
public void actionPerformed(ActionEvent event) {
    Object source = event.getSource();
    if (source == pressme) {


    } else if(source == pressme2) {

    }
}

}

第一个附加工作正常,但第二个附加没有,我无法弄清楚原因(尽管for循环确实如此,因为数组的内容被写入控制台)。我已经搜索了很多,而且我没有尝试过任何工作。谁能指出这里不可避免的明显疏忽?我是新手的定义,所以任何建议都值得赞赏。

谢谢!

2 个答案:

答案 0 :(得分:0)

好像你写了一个新节目。你为什么用Swing?你看过JavaFX了吗?

我不确定这是否可以解决您的问题,但您可以尝试使用foreach

for(String s : text){
    irclog.append(s+"\n");
}

答案 1 :(得分:0)

默认构造函数不执行任何操作,这意味着它不构造任何类型的UI或显示,即空框架。

当您将文字附加到data

时,您似乎认为该文字会显示在data1

尝试在默认构造函数

中调用this(false)

更好的解决方案是从默认构造函数和“startup”构造函数调用this()构建核心UI,然后以此构造函数需要的方式修改UI