トランの毎日迷宮

Tech系ブログを目指すもの

【Eclipse】Eclipseでカスタムコントロールを作ろうとした【GUIプログラミング】

こんばんにちございます。

トランです。

今回は自分への覚書。

Eclipseで、GUIアプリケーション作るときにJLabelをちょっといじって貼り付けると現在時刻を表示してくれるようになっているカスタムコントロールを作ろうとしていたんですね。で、まぁいろいろダメなとこはあるかもですが作ったのが↓↓↓

package myCon;package myCon;
import java.text.SimpleDateFormat;import java.util.Timer;import java.util.TimerTask;
import javax.swing.JLabel;
public class DispTimeLabel extends JLabel {
private String _str = "";
public String getFStr() { return this._str; } public void setFStr(String arg) { this._str = arg; }
private SimpleDateFormat sdf ; private String timeStr = "";
public TimerTask task = new TimerTask() { @Override public void run() { timeStr = sdf.format(System.currentTimeMillis()); bindTime(); } };
public DispTimeLabel() { this._str = "hh:mm:ss"; sdf = new SimpleDateFormat(_str); startTime(); }
public void bindTime() { this.setText(timeStr); }
public void startTime() { Timer timer = new Timer(); timer.schedule(task, 1000,1000); }
}

なんかうまく貼りつかないな。。。

まぁそれは置いといて、やりたいことはJLabelを継承してTimerTaskとTimerつかって毎秒ごとに現在時刻を表示させる。ってことなんですよ。で、ちょっと欲を出してこの表示形式をプロパティから設定できるようにならんかなーとセッターとゲッターもかいてみたんですね。

するとまぁこんな感じに

f:id:trantran1021:20190527012659j:plain

プロパティの所にset以下の文字列で出てきたわけです。

あ、これはいじったJLabelと同じパッケージにテスト用のJFrame継承したクラスを作ってそこに張り付けたときのプロパティ画面ですよ。

そうそう、作ったカスタムコントロールって↓↓↓↓

f:id:trantran1021:20190527013042j:plain

↓↓↓↓

f:id:trantran1021:20190527013036j:plain

から選択できるって知ってました?選択したら貼り付けですね。

ちょっと横道にそれちゃったけど、本題に戻るとプロパティに項目は上がりました。

さぁ値を"yyyy/MM/dd"にした、、、んだけどうまくいかなかった。お察しですが

テスト用のクラスのコードを覗くと

f:id:trantran1021:20190527013417j:plain

こうなっているんですよね。newした後になにしてもだめだろってハナシですな、、、

もう一個引数アリのコンストラクタ作って対応するかな。。。

 

そんなわけで、おしまい。

【Eclipse】ショートカットキー追記【VisualStudio】

こんばんにちございます。トランです。

言い忘れていたショートカットがありました。

 

Eclipse

CTRL+SHIFT+R リソースを開く

パッケージエクスプローラJavaファイルを探すよりこっちがオススメです。

CTRL+O クイックアウトライン

クラス内の変数、定数、メソッドが俯瞰できるツールチップみたいなのが出ます。そこで検索もできます。クリックすると宣言部にジャンプできて非常に便利です。

VisualStudio編

CTRL+、(カンマ) すべてに移動

Eclipseのクイックアウトラインほどじゃないんですが目的のメソッドやら変数にジャンプしたいときに便利です。

CTRL+:(セミコロン)ソリューションエクスプローラーの検索

Eclipseのリソースを開くと似たような使い道ができます。ファイルいっぱいあるソリューションの探し物がすぐ見つかります。

 

ちなみになんですが、ショートカットキーは

Eclipseならメニューボタンのウィンドウ→設定→一般の中のキー

VisualStudioならメニューボタンのツール→環境の中のキーボード

からカスタマイズができます。

 

そんなわけで、おしまい

【VisualStudio】便利なショートカット【ポチッとな】

こんばんにちございます。トランです

前回こんなのを書きました。

 

wordsoftrantran1021.hatenablog.com今日はそのVisualStudio版を探してみました。動作はVisualStudio2017(コミュニティ)

・CTRL+K→CTRL+T もしくは CTRL+ALT+K 呼び出し階層の表示

・ALT+↑キーもしくは↓キー カーソルのある行丸ごとの移動

・CTRL+J 変数名やメソッド等のコード補完

・CTRL+X(未選択状態) カーソルのある1行を切り取り!

・CTRL+G 指定行へジャンプ

・CTRL+SHIFT+F グレップ検索。

・CTRL+」(閉じ鍵括弧) 対応する括弧にジャンプ

・CTRL+R→CTRL+R 名称一括リネーム

・CTRL+SHIFT+F12 後方の警告やエラーにジャンプ

 これでVisualStudioでもEclipseで使えたショートカットが使える!

 

そんなわけで、おしまい。

【知らなかった】スクリーンショットの取り方【Snipping Tool】

こんばんにちございます。トランです。

今日はスクリーンショットの取り方のお話です。

スクリーンショットという言葉をご存知でしょうか。パソコンの画面の全部、あるいは一部を写真をとるように画像として保存する機能、ソフトのことです。ハードコピーという言い方をする人もいらっしゃいます。あと画面キャプチャーとも言いますかね。

 

さてさて、なんでこんな話かというと、少し前に行った仕事先のPCで作業をしているときにスクリーンショットを撮ろうかと思いまして、いつも自社PCではGreenShot、自宅PCではf:id:trantran1021:20190518104226j:plainこの猫のマークのアイコンが特徴的なWinshot等フリーソフトを使っていたんですが、、、なんとそれ系の物はない、そして入れてはいけないルール。。。。

ってことはまさか画面全体(prtscキー)、もしくはアクティブウィンドウ(ALTキー+prtscキー)しかない、、、矩形選択ができないものか調べた結果。

 

方法1 Snipping Toolを使う

f:id:trantran1021:20190518104233j:plain←こんなものがWindows7以降ならアクセサリに入っているはずです。知らなかったんですがWindows7以降標準装備らしいです。もっと言えばWindow10以降ならばWindowsキー+shiftキー+Sのショートカットで使えます。これでクリップボードに矩形選択のスクリーンショットが取得できます。客先PCはWindows10だったのでこれで回避できました。なんかアイコンかっこいいな。

 

方法2 Excelに入ってるスクリーンショットを使う。

f:id:trantran1021:20190518104207j:plain

これも知らなかったんですが、上の画像のようなものがExcel2010以降には入ってます。この画面の領域というものを使えば前述のSnipping Toolと同じく矩形選択の画像が取得できます。ただしクリップボードではなくエクセルにベチッと張り付けられます。

エクセルで作業しているときはこちらを使用した方が速いと思います。

 

ちょっと余談なんですが、スクリーンショットはスクリーン(画面)をショット(パシャッと写真を撮る感じ)ってな具合で、画面キャプチャーはCaptureが捕えるという意味なので画面を捕えるってな具合で、呼び方として納得ですけど、ハードコピーって、、、屁理屈かもしれませんけど別にハードをコピーしてないやん。。。ソフト内々での話やん。。。なんてね。

 

そんなわけで、おしまい 文字数979

【Java】Listから要素を取り出すのメモ!【繰り返し】

こんばんにちございます。トランです。

久々の更新です。JavaArrayList系,つまりコレクションから値を取り出すとき、皆さんはどうしていますか?何通りあるんだろう?今日はそんなことを思ったのでいっぱい試してみました。以下エクリプスでのスクリーンショットです。

f:id:trantran1021:20190404010401j:plain

まぁこんな感じにArrayListを作りました。さぁいくよ~~~~

f:id:trantran1021:20190404010528j:plain

f:id:trantran1021:20190404010619j:plain

 

f:id:trantran1021:20190404010702j:plain

これでもかってくらいfor文がありますね。for文の初期値、条件式、インクリメンタルは省略ができるのを知っていたでしょうか?まぁ省略して書いたら書いたで中にif文やらbreakが必要になってくるんですけどね。※条件式を省略したfor文は常にtrueになりますのでbreakやreturnなしは無限ループにはまる

while文なんかもおなじみですね。ご存知かもしれませんがwhile文は条件式の省略はできません。条件の中身に直接trueを書き込むことができます。その際は無限ループから脱出する方法を用意するのをお忘れなく。

iteratorはあんまり良さがわからんですね。。。streamや拡張for文でてきたから日の目を見る機会が少なくなってきている気がします。余談なんですがOracleデータベースから値を取り出すときとかの結果セットから値を取り出す操作に似ているきがする。next()するあたり、、、。

Java1.8から出てきたfor-eachメソッドとstreamは面白い書き方になっていますね。

ラムダ式という書き方でまーなんとなくわかるんですけどまだ完全に使いこなせていないので早く書きまくってさっと使えるようになりたいですね。慣れないせいか内部でどういう処理を行っているかがパッと思い浮かべることができないというのはくやしいですね。

漢字間違えてるー。正しくは再帰ですね。再帰呼び出しは無理矢理感半端ない。わざわざ別のメソッドまで作ってやる必要がどこにあったのかというね。もうラインナップを増やす要因にしかなっていない気がする。ちなみになんですけどこの再帰呼び出しもif文を使ったりしてこの再帰を抜ける処理を書いてあげないと無限ループになってしまいますので注意が必要です。

やっぱりこの中で一番好きな書き方はやっぱり拡張for文ですね。インデックス変数を使わずにすべての要素に対して処理が行えますし。これならコレクションの中が1になろうが2になろうが3になろうが100になろうが大丈夫ってのがいいですね。

いかがでしたでしょうか?たくさんのコレクション操作の仕方がありますね。

そんなわけで、おやすみ。

 

 

【ExcelVBA】セルをダブルクリック【文字列取得】

こんばんにちございます。トランです。

さぁエクセルネタです。

今日はエクセルファイル内でセルをダブルクリックしたらそのセルの文字列を取得する、というものです。

早速やっていきましょう。まず新しいエクセルを開いてください。そして現在のシートがSheet1になっていることを確認してください。

まずは「開発」リボンがあるかどうかです。

f:id:trantran1021:20190227233459j:plain

もしこれがなければファイルリボンからオプションでこの開発リボンを出しましょう。

f:id:trantran1021:20190227233850j:plain

だしたら早速開発リボンをクリックしてください、そしたら真ん中らへんにコードの表示というのがあるのでクリック

f:id:trantran1021:20190227234208j:plain

するとこんな画面が出てくるはずです。

f:id:trantran1021:20190227234354j:plain

次に、ツールバーのツールの中の参照設定を見てください。

そして、参照設定でMicrosoft Forms 2.0 Object Libraryというところのチェックをいれてください。もし一覧で見つからないようでしたら右の参照というボタンをおして画像内の下の場所の横に書いてあるC:\WINDOWS\SysWOW64というフォルダの中にあるFM20.DLLというファイルを追加してください。

f:id:trantran1021:20190227234803j:plain

そうしたらばひとつ前の画像の真ん中あたりの(General)というところをクリックしてWorkSheetを選択してください。そうするとこんな画面になると思います。

この時左側のプロジェクトという小さめのウィンドウのなかのSheet1(Sheet1)が選択されていることを覚えておいてください。

f:id:trantran1021:20190227235411j:plain

次です。先ほどWorkSheetに変えた横にSelectionChangeとなっている所をクリックしてBeforeDoubleClickを選択してください。

f:id:trantran1021:20190228000016j:plain

すると、上の画像のような行が勝手に追加されているかと思います。

次は少しコーディングです。下の画像のように書いてみてください。

f:id:trantran1021:20190228000305j:plain

これでOKです。少し解説をいたしますと、

private Sub Worksheet_BeforeDoubleClickからEnd Subまでの処理は

WorkSheet1においてのみダブルクリックすると実行されます。

Sheet1でコードの編集をしたから当たり前言われるかもしれませんが、、、

またその実行の際ダブルクリックした選択位置をTargetという変数に持ちます。

各行の処理は

Dim cb As New DataObject

DataObjectというセルの値格納用の入れ物をcbという名前で新規作成します。

名前はcbでなくてもよいです。そしてこれは先ほど参照設定で追加したMicrosoft Forms 2.0 Object Libraryのおかげで使えています。

cb.SetText Target.Text

cbにTarget(選択位置)の文字列をセットします。SetTextとTargetの間には半角スペースを一つあけておいてください。

cb.PutInClipboard

cbの中身をクリップボードに格納します。

Range("A1").Activate

一番左上のセルにカーソルを移動させます。どうしてこれをやっているかというと数式セルに対して数式編集モードになるのを防ぐためです。勘のいい方ならわかったかもしれませんがもし一番左上のセルが数式セルだった場合は数式編集モードになってしまいます。。。。

さぁ×ボタンで閉じてウィンドウを閉じてください。

これでSheet1上でセルをダブルクリックするとその値がクリップボードに入るようになっているはずです。ダブルクリックが成功すると一番左上のセルにカーソルが移動します。

そんなわけで、おしまい

 

【正規表現】コードにつけたコメントをそろえた話【gPad活躍】

こんばんにちございます。トランです。

タイトルが全く意味の分からないことと思います。

今回は僕の閃きのお話です。

今回もEclipse、gPad、正規表現が登場いたします。

こんなSQL文を前にしていた時でした。

INSERT INTO TABLE (
Item1
,Item2
,Item3
,Item4
,Item5
,Item6
,Item7
,Item8
)
VALUES(
ValueValueValueValueValueValueValue//コメント1
,ValueValueValueValue//コメント2
,ValueValue//コメント3
,ValueValueValue//コメント4
,ValueValueValueValueValue//コメント5
,ValueValue//コメント6
,ValueValueValueValue//コメント7
,ValueValueValue//コメント8
)

それぞれのコメントにはINSERTされる値の名前が書かれていたのですが何とも行がバラバラなのが気になりました。

コメント1にそのほかのコメントも合わされば見やすいと思って閃いた方法があるのでご紹介します。ちなみに実際は160項目ありました。

手順1:コメントをそろえたい位置以上に離す。ここはEclipse正規表現を使いましたがgPadでもできます!

下の画像のような検索と置換を使いました。

f:id:trantran1021:20190221205412j:plain

f:id:trantran1021:20190221205430j:plain

手順2:gPadへ先ほどのテキストをコピーしてくる→下記がポイント

これはEclipseでは選択した行に対してしかできなかったんで実現できませんでしたが、gPadの置換の選択した範囲にチェックをつけてそれぞれ下のように設定し、そろえたい位置から矩形選択をします。矩形選択はALT+SHIFT+矢印キーでできます。さぁ準備はできました。全て置換!

f:id:trantran1021:20190221205403j:plain

f:id:trantran1021:20190221205344j:plain

よっしゃ~~~~~~~!望みどおりの結果です。

まぁコメントに//をつけるというJavaのルールがあったからこそ決まった技ですので

一概にすべてのパターンには適用できるとはいえませんが発見できたときは嬉しかった。。。

今日は矩形選択と選択範囲での正規表現の適用のありがたさがしみじみわかりました。

gPad様様でした。

そんなわけで、おしまい。