最も簡単な方法は、ロガーインターフェイスを定義することです。
package com.example.logging;
public interface ActivityLogger {
void logAction(String message);
}
次に、それを非GUIコンポーネントに渡して、特定の実装に縛られないようにします。
public class FileLoader {
private ActivityLogger logger;
public FileLoader(ActivityLogger logger){
this.logger = logger;
}
public void loadFile(){
// load stuff from file
logger.logAction("File loaded successfully");
}
}
これで、テキストコンポーネントに書き込む実装を作成するのは簡単です。
public class TextComponentLogger implements ActivityLogger{
private final JTextComponent target;
public TextComponentLogger(JTextComponent target) {
this.target = target;
}
public void logAction(final String message){
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
target.setText(String.format("%s%s%n",
target.getText(),
message));
}
});
}
}
// Usage:
JTextArea logView = new JTextArea();
TextComponentLogger logger = new TextComponentLogger(logView);
FileLoader fileLoader = new FileLoader(logger);
fileLoader.loadFile();
もちろん、標準のログフレームワーク(java.util.logging、slf4j、log4jなど)を使用して、テキストコンポーネントに「書き込む」アペンダーを作成することもできます。