制作一个可以从另一个打印到的文本区域 class
Making a text area that can be printed to from another class
我正在尝试使用程序的输出文本区域 UI 元素来打印程序的进度和更新,而不是使用 Eclipse 内的控制台输出。我可以这样说:
System.out.println(string);
但不是打印到控制台,而是打印到 UI 上我自己的文本区域。我的代码看起来有点像这样(我删除了其他面板元素以更专注于此):
这是我的 MainPanel
class,我在这里创建要打印的元素:
public class MainPanel extends JPanel{
private JTextArea consoleOutput;
private JButton submitButton;
public MainPanel(){
setLayout(null);
Border border = BorderFactory.createLineBorder(Color.LIGHT_GRAY);
Font f1 = new Font("Arial", Font.PLAIN, 14);
consoleOutput = new JTextArea();
consoleOutput.setBounds(199, 122, 375 , 210);
consoleOutput.setBorder(BorderFactory.createCompoundBorder(border, BorderFactory.createEmptyBorder(3, 4, 0, 0)));
consoleOutput.setEditable(false);
consoleOutput.setFont(f1);
submitButton = new JButton("Get Cards");
submitButton.setBounds(35, 285, 107, 49);
submitButton.setFont(f2);
submitButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
String username = "HenryJeff";
String password = "Password";
Cards cards = new Cards();
cards.openTabs(username,password);
}
});
add(consoleOutput);
add(submitButton);
}
}
这是我的 Cards
class:
public class Cards{
public void openTabs(String username, String password){
System.out.println(username + ", " + password);
}
如何替换 System.out.println();
以打印到我的文本区域?我试过让我的 Cards
class 扩展我的 JPanel
并在那里制作和创建控制台文本区域,然后添加一个写入文本区域的写入方法但是它没有用。任何帮助表示赞赏!
在你的MainPanel
class
cards.openTabs(username,password,this);
并将您的 consoleOutput
指定为非 private
某些默认值。
改变你的 Cards
class
public class Cards{
public void openTabs(String username, String password, MainPanel panel){
panel.consoleOutput.setText(username + ", " + password);
//now both user name and password will be displayed in text area of MainPanel class.
}
您可以通过在 JTextArea
和 Writer
的 Document
之间创建桥梁来做到这一点:
public class PlainDocumentWriter extends PlainDocument implements Writer {
public Writer append(char c) {
// Note: is thread-safe. can share between threads.
insertString(getLength(), Char.toString(c), new SimpleAttributeSet());
}
public Writer append(CharSequence csq) {
insertString(getLength(), csq.toString(), new SimpleAttributeSet());
}
// etc.
}
然后:
PlainDocumentWriter w = new PlainDocumentWriter();
consoleOutput = new JTextArea(w);
PrintWriter pw = new PrintWriter(w);
然后:
pw.println(username + ", " + password);
现在,您写到 PrintWriter
的任何内容都会显示在文本区域中。
我正在尝试使用程序的输出文本区域 UI 元素来打印程序的进度和更新,而不是使用 Eclipse 内的控制台输出。我可以这样说:
System.out.println(string);
但不是打印到控制台,而是打印到 UI 上我自己的文本区域。我的代码看起来有点像这样(我删除了其他面板元素以更专注于此):
这是我的 MainPanel
class,我在这里创建要打印的元素:
public class MainPanel extends JPanel{
private JTextArea consoleOutput;
private JButton submitButton;
public MainPanel(){
setLayout(null);
Border border = BorderFactory.createLineBorder(Color.LIGHT_GRAY);
Font f1 = new Font("Arial", Font.PLAIN, 14);
consoleOutput = new JTextArea();
consoleOutput.setBounds(199, 122, 375 , 210);
consoleOutput.setBorder(BorderFactory.createCompoundBorder(border, BorderFactory.createEmptyBorder(3, 4, 0, 0)));
consoleOutput.setEditable(false);
consoleOutput.setFont(f1);
submitButton = new JButton("Get Cards");
submitButton.setBounds(35, 285, 107, 49);
submitButton.setFont(f2);
submitButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
String username = "HenryJeff";
String password = "Password";
Cards cards = new Cards();
cards.openTabs(username,password);
}
});
add(consoleOutput);
add(submitButton);
}
}
这是我的 Cards
class:
public class Cards{
public void openTabs(String username, String password){
System.out.println(username + ", " + password);
}
如何替换 System.out.println();
以打印到我的文本区域?我试过让我的 Cards
class 扩展我的 JPanel
并在那里制作和创建控制台文本区域,然后添加一个写入文本区域的写入方法但是它没有用。任何帮助表示赞赏!
在你的MainPanel
class
cards.openTabs(username,password,this);
并将您的 consoleOutput
指定为非 private
某些默认值。
改变你的 Cards
class
public class Cards{
public void openTabs(String username, String password, MainPanel panel){
panel.consoleOutput.setText(username + ", " + password);
//now both user name and password will be displayed in text area of MainPanel class.
}
您可以通过在 JTextArea
和 Writer
的 Document
之间创建桥梁来做到这一点:
public class PlainDocumentWriter extends PlainDocument implements Writer {
public Writer append(char c) {
// Note: is thread-safe. can share between threads.
insertString(getLength(), Char.toString(c), new SimpleAttributeSet());
}
public Writer append(CharSequence csq) {
insertString(getLength(), csq.toString(), new SimpleAttributeSet());
}
// etc.
}
然后:
PlainDocumentWriter w = new PlainDocumentWriter();
consoleOutput = new JTextArea(w);
PrintWriter pw = new PrintWriter(w);
然后:
pw.println(username + ", " + password);
现在,您写到 PrintWriter
的任何内容都会显示在文本区域中。