frameの準備

ログ用フレームに文字を出力する

ログ出力用のフレームを作りましたので、次はテキストの出力です。
main()に出力文字をセットします。


public class MainTestFrm12 {
	public static void main(String[] args){
		 LogField log = LogField.getInstance(); 
 
			log.setTitle("タイトルをやり直す");
			log.setText("テキストエリアに追加するその2");
			log.setText("テキストエリアに追加するその3");
	}
}

次は、LogField()です。これも前と同じです。出力文字を中継する機能を付け足しました。


public class LogField {
	static String title="仮のタイトル";
	private static LogField insta = new LogField();	  // privateがみそ ここにだけnew
	private LogFrame frame;
	  
	private LogField() {	//フレームを作る
		frame = new LogFrame(title);
	}
		
	public static LogField getInstance() {	  // インスタンス取得メソッド ここはpublic
		return insta;
	}
 
	public void setTitle(String string) {		
		frame.setTitle(string);
	}
	
	public void setText(String string) {
		frame.setText(string);
	}
	
	
}

最後にLogFrame()です。テキストを出力するメソッドを追加しました。



import java.awt.BorderLayout;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ComponentEvent;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.plaf.ComponentUI;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.Style;



public class LogFrame extends JFrame{

	private JPanel contentPane = null;
	private JLabel statusBar = new JLabel();
	private JScrollPane jScrollPane = new JScrollPane();
	private BorderLayout borderLayout1 = new BorderLayout();
	private DefaultStyledDocument doc = new DefaultStyledDocument();

	private JTextPane jTextPane = new JTextPane(doc) {
		public boolean getScrollableTracksViewportWidth() {
			Component parent = this.getParent();
			ComponentUI ui = this.getUI();
			return(ui.getPreferredSize(this).width < parent.getSize().width);
		}
	};
	private Style STYLE = doc.addStyle(null, null);
	  
	
	public LogFrame(String title) {
	    try {
		      finit(title);
		    }
		    catch(Exception e) {
		     
		      e.printStackTrace();
		    }

		    validate();
		    setLocation(100,100);
		    setVisible(true);
		    clear();	
	}
		
	  void clear() {
		    if(jTextPane == null) {          // jTextPaneが作成されていない
		      return;
		    }
		    jTextPane.setText("");
		  
		  }
	
	  private void finit(String title) throws Exception  {
		   
		    contentPane = (JPanel) this.getContentPane();
		    contentPane.setLayout(borderLayout1);
		    this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
		    this.setSize(new Dimension(512, 400));
		    this.setTitle(title);

		    this.addComponentListener(new java.awt.event.ComponentAdapter() {
			      public void componentResized(ComponentEvent e) {
			        this_componentResized(e);
			      }
			    });
		    contentPane.setMaximumSize(new Dimension(400, 2000000000));
		    contentPane.setMinimumSize(new Dimension(40, 40));
		    contentPane.setPreferredSize(new Dimension(400, 300));
		    statusBar.setToolTipText("");
		    statusBar.setText(" ");
		    jTextPane.addComponentListener(new java.awt.event.ComponentAdapter() {
		      public void componentResized(ComponentEvent e) {
			        jTextPane_componentResized(e);
			      }
			    });
		    jTextPane.setMaximumSize(new Dimension(400, 2000000000));
		    jTextPane.setEditable(false);
	
		    jScrollPane.setMaximumSize(new Dimension(400, 30000));
		    contentPane.add(statusBar, BorderLayout.SOUTH);
		    contentPane.add(jScrollPane, BorderLayout.CENTER);
		    jScrollPane.getViewport().add(jTextPane, null);

		  }
	  	  
	   /**
	    * フレームのリサイズリスナ
	    **/
	  private void this_componentResized(ComponentEvent e) {
	    if(this.getSize().width > 1280) {
	      this.setSize(new Dimension(1280,this.getSize().height));
	    }
	  }
	  
	  /**
	    * テキストサイズ変更リスナ
	    * 
	    */
	  private void jTextPane_componentResized(ComponentEvent e) {
	  
		  jScrollPane.getVerticalScrollBar().setValue(jTextPane.getHeight());
	   
	  }

	  
	  
	  /**
	   *  フレーム終了処理
	   * */
	  protected void processWindowEvent(WindowEvent e) {
	    super.processWindowEvent(e);
	    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
		      if(ckClose()) {
		    	  System.exit(0);
		      }
	    }
	  } 

	  /**
	   * 終了確認
	   */
	  private boolean ckClose() {
	     boolean ret = false;
	    // 確認ダイアログの表示
	    if(JOptionPane.showConfirmDialog(this, "フレーム閉じますよ!",
	                   "MainFrame", JOptionPane.OK_CANCEL_OPTION)
	                   == JOptionPane.YES_OPTION) { // OK
	      ret = true;
	    }
	    return ret;
	  }


 
/**
 * ログを出力する。
*/
	void setText(String text) {
		if(doc == null || STYLE == null) {          // doc or STYLEが作成されていない
			System.out.println(text);
			return;
		}
		try {
			doc.insertString(doc.getLength(), text + System.getProperty("line.separator"), STYLE);
		}
		catch(BadLocationException e) {
			System.out.println(e);
		}
	}
}



hello

 実行すると右図のようになります。テキストが出力されました。