SQLの窓

2018年06月26日


バッチファイル(コマンドプロンプト)で使用できる特殊な3つの環境変数



昔、Windows の ヘルプとサポートセンターで コマンドシェル で検索すると、コマンドシェルの概要 というのがリストの中に出てきました。
1) %CD%
2) %ERRORLEVEL%
3) %RANDOM%
当然バッチファイル内でのプログラミング目的です。環境変数は、コマンド内で置き換えられてそのまま実行されるので以下のような使い方ができるので便利です
title ユーザーコマンドプロンプト / %cd%
これは、コマンドプロンプトのタイトルに現在のディレクトリを表示します。 cur.bat(laylaClass バッチ処理支援パッケージ) の中身です。 例えばユーザ変数に現在のカレントディレクトリへ戻るコマンドをセットします
set ROOT=cd %CD%
その後(同じドライブであれば)、cd コマンドであちこち移動しても %ROOT% と実行すれば、元に返ってこれます ※ 初期投稿 : 2009-08-28 17:56:27
posted by lightbox at 2018-06-26 16:12 | コマンド : バッチファイル | このブログの読者になる | 更新情報をチェックする

2018年06月20日


WindowsBuilder の JFaceで アプリケーションウインドウとダイアログを使用した基本処理

WindowsBuilder のインストールとプロジェクトの作成

▼ 以下を参照して下さい
Pleiades All in One で、Windows アプリを作成する手順( WindowBuilder + Swing デザイナー or SWT デザイナー[JFace] )

ApplicationWindow を中央に表示
	@Override
	protected Point getInitialLocation(Point initialSize) {

		GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();

		// デスクトップのサイズ
		Point windowSize = new Point(
				env.getMaximumWindowBounds().width,
				env.getMaximumWindowBounds().height);
		Point position = new Point(0,0);

		// デスクトップの中心に表示します
		return new Point(
			position.x + ((windowSize.x - initialSize.x) / 2),
			position.y + ((windowSize.y - initialSize.y) / 2)
		);
	}

ダイアログの呼び出し

呼び出し先から、こちら側のコントロールにアクセスする為、識別する為に名前を setData でセットしています
		Button btnNewButton = new Button(container, SWT.NONE);
		btnNewButton.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				Dialog1 dialog = new Dialog1(getShell());
				int result = dialog.open();
				System.out.println(result);
			}
		});
		btnNewButton.setBounds(10, 10, 75, 25);
		btnNewButton.setText("New Button");
		btnNewButton.setData("name","Button1");



ダイアログを親ウインドウの中央に
	@Override
	protected Point getInitialLocation(Point initialSize) {

		Point windowSize = this.getShell().getParent().getSize();
		Point position = this.getShell().getParent().getLocation();

		return new Point(
			position.x + ((windowSize.x - initialSize.x) / 2),
			position.y + ((windowSize.y - initialSize.y) / 2)
		);
	}



ダイアログから親ウインドウにアクセス

対症療法なので正確では無いですが、parentShell.getChildren() の内容にもう少しチェックを追加すれば使用に問題は無いと思います。コンストラクタにウインドウのインスタンスを渡せば簡単ですが、汎用性はこちらのほうが勝ると思います。
	@Override
	protected void createButtonsForButtonBar(Composite parent) {
		Button button = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
		button.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {

				Shell parentShell = Dialog1.this.getParentShell();
				Control[] controls = parentShell.getChildren();
				Composite con = (Composite)controls[1];

				controls = con.getChildren();

				for( Control control: controls ) {
					Object name = control.getData("name");
					if ( name != null) {
						if ( name.toString().equals("Button1") ) {
							Button btn = (Button) controls[0];
							btn.setText("ボタン");
							break;
						}
					}
				}

				Dialog1.this.setReturnCode(Dialog.OK);
				Dialog1.this.close();

			}
		});
		Button button_1 = createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
		button_1.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				Dialog1.this.setReturnCode(Dialog.CANCEL);
				Dialog1.this.close();
			}
		});
	}





posted by lightbox at 2018-06-20 20:02 | Pleiades | このブログの読者になる | 更新情報をチェックする

Pleiades Oxygen + WindowsBuilder で MySQL を使用して SQL(select) からデータの一覧を表示する

WindowsBuilder のインストールとプロジェクトの作成

Pleiades All in One で、Windows アプリを作成する手順( WindowBuilder + Swing デザイナー or SWT デザイナー[JFace] )

JFace の アプリケーションウインドウを追加します



パースペクティブを Java EE に変更



Oxygen で、WindowBuilder エディターにフォントの設定が効かないので、Java エディタも開いて併用します。
( Java エディタ では、CTRL + プラスキー でフォントが大きくなります )



使えないコントロールを削除

toolBarManager と statusLineManager はコードでしかメンテできそうにないので、メニューでテストは十分なので削除します。



関連する 必要ない Override メソッドも削除します



最後に必要なくなった呼び出し部分も削除します



▼ この時点で以下のようなソースになります( タイトルは変更しています )
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class Main extends ApplicationWindow {

	// *******************************
	// コンストラクタ
	// *******************************
	public Main() {
		super(null);
		createActions();
		addMenuBar();
	}

	// *******************************
	// 画面作成
	// *******************************
	@Override
	protected Control createContents(Composite parent) {
		Composite container = new Composite(parent, SWT.NONE);

		return container;
	}

	// *******************************
	// コンストラクタからの初期処理
	// *******************************
	private void createActions() {

	}

	// *******************************
	// メニュー
	// *******************************
	@Override
	protected MenuManager createMenuManager() {
		MenuManager menuManager = new MenuManager("menu");
		return menuManager;
	}

	// *******************************
	// エントリポイント
	// *******************************
	public static void main(String args[]) {
		try {
			Main window = new Main();
			window.setBlockOnOpen(true);
			window.open();
			Display.getCurrent().dispose();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// *******************************
	// ウインドウ ( Shell )
	// *******************************
	@Override
	protected void configureShell(Shell newShell) {
		super.configureShell(newShell);
		// ウインドウのタイトル
		newShell.setText("MySQL データ表示");
	}

	// *******************************
	// ウインドウサイズ
	// *******************************
	@Override
	protected Point getInitialSize() {
		return new Point(635, 405);
	}
}


テーブルのサイズをウインドウのサイズ変更と同期させる


protected Control createContents(Composite parent) {
	Composite container = new Composite(parent, SWT.NONE);
	container.addControlListener(new ControlAdapter() {
		@Override
		public void controlResized(ControlEvent e) {
			// org.eclipse.swt.graphics.Rectangle;
			Rectangle size = container.getClientArea();
			table.setSize(size.width-21, size.height-24);
		}
	});

	table = new Table(container, SWT.BORDER | SWT.FULL_SELECTION);
	table.setBounds(10, 10, 599, 322);
	table.setHeaderVisible(true);
	table.setLinesVisible(true);

	return container;
}
メニューをデザイナから追加します 1) MenuManager を選択 2) メニュー部分をクリック 3) 新規を選択 4) メニューアイテム部分をクリック 5) メニューアイテムが一つ作成される コードも同時に作成されているので、Override の run を追加して loadMySQL("select * from 社員マスタ"); を追加
// *******************************
// コンストラクタからの初期処理
// *******************************
private void createActions() {

	{
		action = new Action("New Action") {
			@Override
			public void run() {
				table.removeAll();
				loadMySQL("select * from 社員マスタ");
				
			}
		};
	}
}

protected void loadMySQL(String string) {
	
	
}
MySQL 処理部分 private Connection conn = null; private Statement stmt = null; private ResultSet rs = null; private int maxRows = 20;
	protected void loadMySQL(String string) {

		try {
			// MySQL Connector/J 接続
			conn = (Connection) DriverManager.getConnection(
				// mysql-connector-java-8.0.11 で serverTimezone が必要
				"jdbc:mysql://localhost/lightbox?user=root&password=&characterEncoding=UTF-8&serverTimezone=JST"
			);

			stmt = (Statement) conn.createStatement();
			rs = stmt.executeQuery(string);

			// select の結果の列情報の取得
			ResultSetMetaData rsmd = (ResultSetMetaData) rs.getMetaData();

			// 列数
			int columnCount = rsmd.getColumnCount();

			// 前回のテーブル列を全て削除
			int tableColumnCount = table.getColumnCount();
			TableColumn tableColumnWork = null;
			for( int i = tableColumnCount - 1; i >= 0; i--) {
				tableColumnWork = table.getColumn(i);
				tableColumnWork.dispose();
			}

			// 列名
			TableColumn tableColumn = null;
			for( int i = 1; i <= columnCount; i++) {
				tableColumn = new TableColumn(table, SWT.NONE);
				tableColumn.setWidth(100);
				tableColumn.setText(rsmd.getColumnName(i));
			}

			TableItem tableItem = null;
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
			int countRow = 0;
			while( rs.next() && countRow < maxRows ) {

				countRow++;

				String[] columnData = new String[columnCount];

				for( int i = 1; i <= columnCount; i++) {

					if ( rsmd.getColumnTypeName(i).equals("DATETIME") ) {
						columnData[i-1] = sdf.format(rs.getDate(i));
					}
					else {
						columnData[i-1] = rs.getString(i);
					}

				}
				tableItem = new TableItem(table, SWT.NONE);
				tableItem.setText(columnData);
			}

			rs.close();
			stmt.close();
			conn.close();

		} catch (SQLException ex) {
			// handle any errors
			System.out.println("SQLException: " + ex.getMessage());
			System.out.println("SQLState: " + ex.getSQLState());
			System.out.println("VendorError: " + ex.getErrorCode());
		}
	}

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

行をダブルクリックした時の行データの取得
		table.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDoubleClick(MouseEvent e) {
				int row_no = table.getSelectionIndex();
				// 行 は 0 以上
				if ( row_no >= 0 ) {
					// タイトル部分の表示
					TableColumn[] tableColumns = table.getColumns();
					for( TableColumn column: tableColumns ) {
						System.out.println( column.getText() );
					}

					// 行部分の表示
					TableItem tableItem = table.getItem(row_no);
					int columnCount = tableColumns.length;
					for( int i = 0; i < columnCount; i++ ) {
						System.out.println( tableItem.getText(i));
					}
				}
				
			}
		});

関連する記事

WindowBuilder JFace : WEB より JSON を取得して Table に表示する




posted by lightbox at 2018-06-20 17:28 | Pleiades | このブログの読者になる | 更新情報をチェックする

C# : DataGridView に TKMP.DLL の IMAP で受信したメールを非同期に表示する

DataGridView の作成方法の注意点は、『C# でDataTable と DataSource を使用して、DataGridView にデータを表示するテンプレート( 行をダブルクリックしてダイアログを表示して行データを処理 )』を参照して下さい

行をダブルクリックすると、本文を表示します。ここでは、サンプルして行のカラムに本文を保存していますが、本来は外部に保存します。



▼ スプリットコンテナを使用していますが、配置方法は基本的に直感的なものと逆です。


※ 重要
Gmail では安全性の低いアプリの許可を『有効』にする必要があります

.NET用メール送受信クラスライブラリ (TKMP.DLL) 
※ 2018-06-20 時点で 3.1.8( 2017/02/15 作成 )
using System;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using TKMP.Net;
using TKMP.Reader;

namespace MailRecTest
{
	public partial class Form1 : Form
	{
		private DataTable table;
		private DataColumn column;
		private DataRow row;

		private SynchronizationContext sc = null;
		private ImapClient client = null;
		private int mailCounter = 0;
		private int endCounter = 0;
		private string[] bodyText = new string[20];


		public Form1()
		{
			InitializeComponent();
		}

		private void Form1_Load(object sender, EventArgs e)
		{
			// 非同期内からの UI スレッドへのアクセス用
			sc = SynchronizationContext.Current;

			this.toolStripStatusLabel1.Text = "ツールバーのボタンで受信してください";
		}

		private void toolStripButton1_Click(object sender, EventArgs e)
		{
			if (MessageBox.Show("メールを受信しますか?", "確認", MessageBoxButtons.OKCancel) == DialogResult.Cancel)
			{
				return;
			}

			BasicImapLogon logon = new BasicImapLogon("アカウント", "パスワード");
			client = new ImapClient(logon, "サーバードメイン", 993);
			client.AuthenticationProtocol = AuthenticationProtocols.SSL;

			if (!client.Connect())
			{
				return;
			}

			// メールデータ一覧を格納するオブジェクト
			IMailData[] md = client.GetMailList();

			// データがありません
			if (md == null)
			{
				return;
			}

			// メールデータの数
			toolStripStatusLabel1.Text = md.Length.ToString();
			mailCounter = md.Length;

			// 読込み制限
			int maxCount = 20;
			int idx = 0;

			// 接続解除用
			endCounter = 0;

			// DataTable の作成
			table = new DataTable("TKMP");

			// 列情報 の作成
			column = new DataColumn();
			column.DataType = Type.GetType("System.String");
			column.ColumnName = "差出人";
			table.Columns.Add(column);

			// 列情報 の作成
			column = new DataColumn();
			column.DataType = Type.GetType("System.String");
			column.ColumnName = "件名";
			table.Columns.Add(column);

			// 列情報 の作成
			column = new DataColumn();
			column.DataType = Type.GetType("System.String");
			column.ColumnName = "受信日時";
			table.Columns.Add(column);

			// 列情報 の作成
			column = new DataColumn();
			column.DataType = Type.GetType("System.String");
			column.ColumnName = "本文";
			table.Columns.Add(column);

			// 非同期で全て表示
			foreach (var data in md)
			{

				idx++;
				if (idx > maxCount)
				{
					break;
				}

				// 個別にイベント登録
				data.BodyLoaded += new EventHandler(MailData_BodyLoaded);
				// 非同期処理の受信を一件づつ開始
				data.ReadBodyAnsync();

			}

		}

		private void MailData_BodyLoaded(object sender, EventArgs e) {


			IMailData MailData = (IMailData)sender;

			// 本文無し( 本文が必要な場合は、false で、reader.MainText )
			MailReader reader = new MailReader(MailData.DataStream, false);

			//Console.WriteLine(reader.MainText);

			// UI スレッドへの処理( この場合、post_state は null )
			sc.Post((object post_state) =>
			{


				// 新規行
				row = table.NewRow();

				// 本文をメモリ内保存( 本来はファイルかデータベースに書きだす )
				row["本文"] = reader.MainText;

				// ヘッダの一覧より、目的のヘッダを探す
				foreach (TKMP.Reader.Header.HeaderString headerdata in reader.HeaderCollection)
				{

					if (headerdata.Name == "From")
					{
						row["差出人"] = headerdata.Data;
					}
					if (headerdata.Name == "Subject")
					{
						row["件名"] = headerdata.Data;
					}
					if (headerdata.Name == "Date")
					{
						string target = headerdata.Data;
						target = target.Replace(" (JST)", "");
						try
						{
							DateTime dt = System.DateTime.ParseExact(target, "ddd, d MMM yyyy HH':'mm':'ss zzz", System.Globalization.DateTimeFormatInfo.InvariantInfo, System.Globalization.DateTimeStyles.None);
							row["受信日時"] = string.Format("{0}", dt);
						}
						catch (Exception ex)
						{
							row["受信日時"] = headerdata.Data;
							Console.WriteLine("フォーマット変換できませんでした");
						}

					}

				}

				// 行を追加
				table.Rows.Add(row);


				// 接続解除用
				endCounter++;
				if (endCounter == mailCounter)
				{
					// 受信終了
					client.Close();

					// データーソース経由で DataGridView を表示
					dataGridView1.DataSource = table;

					// カラム定義側の非表示では無く、DataGridView から見たカラムの非表示
					this.dataGridView1.Columns[3].Visible = false;

					// 第3カラム(受信日)で逆ソート
					dataGridView1.Sort(dataGridView1.Columns[2], ListSortDirection.Descending);
					// 自動整列
					dataGridView1.AutoResizeColumns();

				}


			}, null);

			// イベント削除
			MailData.BodyLoaded -= new EventHandler(MailData_BodyLoaded);


		}

		private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
		{
			int rowNumber = e.RowIndex;
			if (rowNumber < 0 ){
				return;
			}

			

			this.textBox1.Text = this.dataGridView1["本文",rowNumber].Value.ToString();
		}
	}
}


関連する記事

C# と VB.net : TKMP.DLL を使って IMAP でメール本文の一覧を取得する( コンソール )




posted by lightbox at 2018-06-20 13:29 | Pleiades | このブログの読者になる | 更新情報をチェックする

C# と VB.net : TKMP.DLL を使って IMAP でメール本文の一覧を取得する( コンソール )

※ 重要
Gmail では安全性の低いアプリの許可を『有効』にする必要があります

.NET用メール送受信クラスライブラリ (TKMP.DLL) 
※ 2011-10-01 時点で 3.0.1
※ 2018-06-20 時点で 3.1.8( 2017/02/15 作成 )

TKMP は、VB.net や C# から日本語環境を気にしないでメールの送受信が行える貴重なライブラリですが、IMAP に対応しておられるのに添付されているドキュメントや、WEB 上のサンプルコードにその記述がありませんでしたので作成しました。

※ IMAP は 2011/08/11 に対応されています。
オンラインドキュメント

C#
using System;
using TKMP.Net;
using TKMP.Reader;

namespace MailRecTestCs
{
    class Program
    {
        static void Main(string[] args)
        {
            // IMAP 用基本認証
            BasicImapLogon logon = new BasicImapLogon("アカウント", "パスワード");
            // IMAP 用ログイン( 993 は、SSL 用 )
            ImapClient client = new ImapClient(logon, "サーバードメイン", 993);

            // SSL で接続する
            client.AuthenticationProtocol = AuthenticationProtocols.SSL;

            // 接続
            client.Connect();

            // メールデータ一覧の取得
            IMailData[] md_i = client.GetMailList();

            // メールデータの数
            Console.WriteLine(md_i.Length);

            // メールデータの本文を取得
            MailReader reader = null/* TODO Change to default(_) if this is not a reference type */;
            System.IO.Stream Body_data = null;

            // 全て表示
            for (int i = 0; i <= md_i.Length - 1; i++)
            {

                // メッセージを読み込む( 同期処理 )
                md_i[i].ReadBody();

                // 読み出しの為にストリームを取得
                Body_data = md_i[i].DataStream;

                // メールリーダで本文を解析
                reader = new TKMP.Reader.MailReader(Body_data, false);

                // マルチパートの時は最初に見つかったテキストセクションの本文
                Console.WriteLine(reader.MainText);

                // ヘッダ情報の取得
                foreach (TKMP.Reader.Header.HeaderString headerdata in reader.HeaderCollection)
                {
                    if (headerdata.Name == "From")
                        Console.WriteLine(string.Format("From : {0}", headerdata.Data));

                    if (headerdata.Name == "Subject")
                        Console.WriteLine(string.Format("Subject : {0}", headerdata.Data));

                    if (headerdata.Name == "Date")
                    {
                        Console.WriteLine(string.Format("Date オリジナル : {0}", headerdata.Data));
                        string target = headerdata.Data;
                        // 日付データの最後に(おそらく)改行が含まれていたので (JST) + 1 で6バイト除去しています
                        target = target.Substring(0, target.Length - 6);
                        try
                        {
                            DateTime dt = System.DateTime.ParseExact(target, "ddd, d MMM yyyy HH':'mm':'ss zzz", System.Globalization.DateTimeFormatInfo.InvariantInfo, System.Globalization.DateTimeStyles.None);
                            Console.WriteLine(string.Format("Date : {0}", dt));
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("フォーマット変換できませんでした");
                        }
                    }
                }
            }

            // 接続解除
            client.Close();

            Console.ReadLine();
        }
    }
}

VB.net
Imports TKMP.Net
Imports TKMP.Reader

Module Module1

    Sub Main()

        ' IMAP 用基本認証
        Dim logon As BasicImapLogon = New BasicImapLogon("アカウント", "パスワード")
        ' IMAP 用ログイン( 993 は、SSL 用 )
        Dim client As ImapClient = New ImapClient(logon, "サーバードメイン", 993)

        ' SSL で接続する
        client.AuthenticationProtocol = AuthenticationProtocols.SSL

        ' 接続
        client.Connect()

        ' メールデータ一覧の取得
        Dim md_i As IMailData() = client.GetMailList()

        ' メールデータの数
        Console.WriteLine(md_i.Length)

        ' メールデータの本文を取得
        Dim reader As MailReader = Nothing
        Dim Body_data As System.IO.Stream = Nothing

        ' 全て表示
        For i As Integer = 0 To md_i.Length - 1

            ' メッセージを読み込む( 同期処理 )
            md_i(i).ReadBody()

            ' 読み出しの為にストリームを取得
            Body_data = md_i(i).DataStream

            ' メールリーダで本文を解析
            reader = New TKMP.Reader.MailReader(Body_data, False)

            ' マルチパートの時は最初に見つかったテキストセクションの本文
            Console.WriteLine(reader.MainText)

            ' ヘッダ情報の取得
            For Each headerdata As TKMP.Reader.Header.HeaderString In reader.HeaderCollection

                If headerdata.Name = "From" Then
                    Console.WriteLine(String.Format("From : {0}", headerdata.Data))
                End If

                If headerdata.Name = "Subject" Then
                    Console.WriteLine(String.Format("Subject : {0}", headerdata.Data))
                End If

                If headerdata.Name = "Date" Then
                    Console.WriteLine(String.Format("Date オリジナル : {0}", headerdata.Data))
                    Dim target As String = headerdata.Data
                    ' 日付データの最後に(おそらく)改行が含まれていたので (JST) + 1 で6バイト除去しています
                    target = target.Substring(0, target.Length - 6)
                    Try
                        Dim dt As DateTime = System.DateTime.ParseExact(target, "ddd, d MMM yyyy HH':'mm':'ss zzz", System.Globalization.DateTimeFormatInfo.InvariantInfo, System.Globalization.DateTimeStyles.None)
                        Console.WriteLine(String.Format("Date : {0}", dt))
                    Catch ex As Exception
                        Console.WriteLine("フォーマット変換できませんでした")
                    End Try
                End If
            Next

        Next

        ' 接続解除
        client.Close()

        Console.ReadLine()

    End Sub


End Module

関連する Microsfot のドキュメント

POP3 アクセス用および IMAP4 アクセス用の TLS と SSL の構成: Exchange 2010 SP1 のヘルプ




posted by lightbox at 2018-06-20 11:05 | VS(C#) | このブログの読者になる | 更新情報をチェックする

2018年06月19日


Pleiades All in One で、Windows アプリを作成する手順( WindowBuilder + Swing デザイナー or SWT デザイナー[JFace] )

関連する記事

Pleiades Eclipse 4.7 Oxygen 2 Windows 64bit Ultimate Full Edition のインストールといろいろな準備
Pythonの開発環境、Ruby( 本体は別インストール ) の開発環境、XAMPP が同梱されます
2018年05月15日 時点 Eclipse 4.7 Oxygen3 が最新バージョンなので、64bit版の Java Full Edition をダウンロードします。 ※ jface のプラグインの修正が必要ありません 2017年04月15日 時点 Eclipse 4.6 Neon 3 が最新バージョンなので、64bit版の Java Full Edition をダウンロードします。 Java だけではなく、Tomcat(6,7,8)JDK(6u48,7u80,8u121) も同梱されており、いろいろ便利に使えます。 解凍 Pleiades のダウンロードファイル(1.01G)はとても名前が長いので、Pleiades.zip に変更し、c:\ に移動してから 7-zip で解凍します。(昔から Pleiades で注意がうながされている、パスの長さの制限に対するものです) jface プラグインの手動整備 Oxygen : 必要ありません Neon : 必要です Mars : ? Luna : 必要ありません ファイルをリネームするだけです。理由は解りませんが、本来の正しいファイルが .backup となっているので、.backup の無いファイルは適当なファイル名にして、.backup の付いたファイルを正式なファイルにします。 ▼ リネーム前 ▼ リネーム後 これは、Eclipse 4.4 Luna では必要無いのですが、たしか、Eclipse 4.5 Mars でも必要があると思います。これをしないと、実行時にエラーが発生します。(フォント用のプロパティファイルが、存在しないため) 最初の実行 Pleiades は、最初と、環境が変わった際に、以下を実行するように強く推奨されています。 eclipse.exe -clean.cmd WindowBuilder のインストール WindowBuilder のサイトよりインストール用の URL を取得します。 ▼ Oxygen ▼ Neon リンク先の URL をクリップボードにコピーします。そして、HELP => 新規ソフトウェアのインストール で、『作業対象』に URL を貼り付けて Enter キーを押して下さい。 WindowBuilder が表示されたら、チェックしてインストールを進めます。 SWT デザイナー[JFace] を使う場合 プロジェクトは専用のものを使いますので、『その他』から以下を選択して下さい。 プロジェクトを作成したら、CTRL+N でその他より、以下を選択して下さい。 実行してウインドウが表示されたら準備完了です。 Swing デザイナー を使う場合 この場合は、プラグインのリネームは必要ありません。プロジェクトも通常の Java プロジェクトで以下を選択します。 これも、実行してウインドウが表示されたら準備完了です。
posted by lightbox at 2018-06-19 11:02 | java : WindowBuilder | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり