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 に表示する