プログラムdeタマゴ

nodamushiの著作物は、文章、画像、プログラムにかかわらず全てUnlicenseです

JAVA

Javaにlambda修飾子が欲しい

機能(関数)をクラス内に実装せずに、外部に委譲することがある。単純な例ではこんな感じ。 public class Action{ private Runnable action; public void setAction(Runnable action){this.action = action;} public void action(){ if(action != null) act…

jshellを自分のプログラムに組み込みたかった

はい。タイトルの通りです。しょーもないことしてました。 jshell JDK9から付属することになっているちまたで話題のJavaのREPL。 私は全く興味がなかったんですけど、ふと思ったんですよ。これ自分のプログラムに組み込めないかな? GUI系のプログラムは毎回…

Java9のVarHandleを使ってみた

AtomicIntegerを使う必要が出てきた場面で、ふとVarHandleのことを思い出し、ちょっと試してみました。 試したコードは最後に載せておきますが、やってみたことはこんな感じ。 staticなint型変数のVarHandleの取得 setとsetVolatileの実行 int,volatile int,…

JavaFXでConsole作ってみた

JavaFXってConsole的な物なくね? ググっても出てこなくね? と、いうわけで、作ってみました、こんなもの。 System.outを今回作ったSimpleConsole.outに変更可能。 マルチスレッド対応(たぶん) 最低限の機能はあるんでない?誰かがしっかりした物を作って…

ファイル選択のControl作った

ウィーっす。 さて、昨日は入力候補が出るTextFieldを作ってみました。入力候補が出るTextField作ってみた - プログラムdeタマゴnodamushi.hatenablog.com で、これを利用してファイル選択用のConrolを作ってみました。 こんな感じに動作します。 うん、使い…

入力候補が出るTextField作ってみた

夏風邪ひいて熱が出たり咳が出たり鼻水出たりでしんどいですが、皆さん体調いかがでしょうか。 さて、風邪ひいていようと暇なものは暇なので、タイトル通りの物を作っていました。 イメージとしてはこんなのね。(Firefoxの検索窓) ソースコードはこちら。No…

JavaFXのTooltipの挙動を変えるTooltipBehavior作った話

JavaFXでTooltipを使ったことがあるだろうか? うん、みなまで言わなくてもいい。 使いにくいよね ざっと欠点を挙げるとするならば、 表示されるまでが遅い 表示されるまでの時間を変えられない 表示時間が短い 表示時間を変えられない フォーカス持っていな…

JavaFXのWebViewがマウスイベントでJVMごとクラッシュする

いろんな訳あってブレークポイントをつけれるエディタを内蔵したいのだ。でも、JavaFXには良いテキストエディタがない。(だいたい、いつになったら全角文字がなんか変な色がつくの直るんだ?) Threadをまたぐのは正直面倒くさいけど、背に腹は代えられない…

Graphicを設定したRadioButtonをSkinで使うと表示がおかしくなる

ControlのSkinにRadioButtonを使う。RadioButtonには画像も表示させたい………。そんなに特別な場面ではないだろう。ところが、おそらくJavaFX8のバグと思われる妙な挙動をしたので、ここで報告しておく。すでにバグとして登録されているかはよく知らない。 問…

ToggleButtonの集合を簡単に扱えるようにしてみた

はてなにお布施の時期が過ぎていたので、ついでにはてなブログに移行してみました。プロの値段…高いよ………。 さて、そんなこんなで、今日もJavaFXネタ。 RadioButtonって複数のRadioButtonを並べて表示するって使い方が普通の場面だと思う。でも、これをする…

cloneなどのメソッドのオーバーライドを強制させるAnnotation作った件について

cloneをサブクラスに実装を強制させたい。でも出来ない。 かといって、「必ず実装する。とらすとみー」なんて言えるほど賢くない。むしろ愚かであることを信用している。 「cloneを利用する実装がそもそも間違いで悪手。cloneを使うなとEffective Javaにもあ…

JOGL,JOCLのEclipse環境を整える

2年ぶりぐらいにJOCL書くかーって思って環境整えようとしたら結構手惑いました。私が利用していたのはJogAmpだったので、今回もJogAmpのJOCLを使おうと思ったんですが、なんか、JOGLが結構2年前と変わってますね。櫻庭さんのJOGLの記事とか、今とインターフ…

Javaでマルチスレッドするときの注意をまとめてみた

数年ぶりとかいうレベルでJavaのスレッドに触ったもんだから色々忘れてたので、忘れてたことまとめておく。 ダブルチェックロッキングパターンって何でダメなんだっけ? Javaではダブルチェックロッキングパターンって場合によってはクリティカルにヤヴァい…

シンタックスハイライトするプログラムをとりあえず公開してみた

Lamuriyan連携用に作っているシンタックスハイライトプログラムを公開してみました。 Ver0.1 今やSyntax HighlighterがあるのでLamuriyanで使う以外にあまり意味はないと思いますが、折角必死に整理したので公開させてください(-_-) 特徴としてはトークン単…

シンタックスハイライトする為のプログラム作ったった

いい加減、ntex改め、Lamuriyanなんとかしないとな〜と手を付けようと思ったのですが、その前に前々から何とかしたいと思っていたソースコードのシンタックスハイライトのプログラムの改善に手を付けることにしました。 まだ私以外の人が動かせるよう整備は…

Javaで始める画像処理ーフィルタをかける

もうすでに何度もこのブログでは当たり前の様にフィルタ処理〜とかたたみ込み〜とか言っていますが、今後の記事の内容のために、ささっとまとめておきます。 フィルタをかける フィルタをかける操作って言うのは、「フィルタの値×ピクセルの値」を各フィルタ…

Java画像処理をはじめよう。初めての縮小(・∀・)

今までこのブログでも何回か拡大縮小の話が出てきたことがありますが、もう一度やっておきましょう。 今回は縮小についてです。 最も簡単な縮小処理 間引き法(最近傍法) 画像を小さくするとピクセルも一緒に小さくなってくれたら嬉しいのですが、そんなわ…

Java画像処理をはじめよう。初めての画像処理(・∀・)

というわけで、なんでか知らんけどJavaで画像を弄らんといけなくなった。手っ取り早く画像処理をしてみたい。そんな人のために書くことにしたよ。 一応シリーズにするつもり。もちろん、気が向いたときにしか更新しないけど。最終的にどこまで踏み込んだ内容…

続・JPenをアプレットで使う際の注意点

ここまでJPenの記事を書いておいたので、もののついでです。Nicolas氏から「アプレットで使う際のセキュリティーホールの問題が見つかった」との報告がありましたので、報告しておきます。日本語の記事なんて探してもここしかないからね。 Java拡張機能とし…

JPen2をアプレットで利用する場合の注意

もうちょっとだけJPenの内容が続いたんじゃよ。 タイトル通りJPenをJava appletで使いたいな、とNicolas Carranza氏(開発者)に聞きに行ってきました。 今までは、セキュリティーマネージャーに引っかかりJPenをJava appletでは動かすことができませんでし…

Javaで筆圧を取得しよう3 〜JPen〜

疲れましたが、これで終わりです。いや、もうちょっとだけ続いたんじゃよ まぁ、実装の仕方に関してはこれで終わりです。 PKindEventを処理する PKindはPButtonEventの処理でちょろっとお話ししましたが、ポインターを操作するデバイスを表しています。 これ…

Javaで筆圧取得してみよう。集まれJPanJPenユーザー

Javaで筆圧取得といえばJTabletである。文句は受け付けない。 特に日本ではほぼJTabletが主流だ。日本製のJavaペイントソフトのしぃペインターやたかみんがJTabletに対応していることが大きな理由だろう。 もっとも、これらで用いられたのは、一般人が簡単に…

Javaで筆圧を取得しよう 2 〜JPen〜

前回から続けてJPen2やっていきますよ〜。今回はレベルイベントを処理していきます。 PLevelEventを処理する レベルイベントは値が変化したときに発生するイベントです。そのとき渡されるイベントはPLevelEventです。マウスイベントに変換する際はMOVEDとDRA…

Java7のswitch(String)構文のJavaコンパイラーとEclipseコンパイラーの違い

Eclipse3.7.1が今日正式にリリースされました。これでEclipse上でもJava7構文が大手を振って使えます。 さて、Java7で投入されたswitchにStringが使えるという構文。 switch(s){ case "abc": System.out.println("ok");break; case "bbb": System.out.printl…

int,byte配列からBufferedImageを作成する

画像のint,byte配列データを直接弄りたいときは、BufferedImageの持つWritableRasterからDataBufferを取り出して、クラスによってDataBufferByteかDataBufferIntに変換し、データを取り出す。何かクールじゃないよね。BufferedImageが用意してくれた配列を私…

パッケージ内のクラスを取得する

JavaCompilerからJavaFileManagerを取得するやり方が簡単だ。 JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); JavaFileManager fm = compiler.getStandardFileManager( new DiagnosticCollector<JavaFileObject>(), null, null); Set<JavaFileObject.Kind> kind = new HashSet<JavaFileObject.Kind>();</javafileobject.kind></javafileobject.kind></javafileobject>…

気をつけろ、javax.swing.TimerはEDTで動くぞ!

どーもアプリケーションの応答が思わぬところで悪くなる。原因を探っていたら、なんとjavax.swing.Timerが原因だった。 javax.swing.Timerはjava.lang.Timerに比べてシンプルで使いやすいので、よく使っていたのだが、なんと、javax.swing.TimerはEDT(Event …

Java7で透明ウィンドウ、非矩形ウィンドウの作り方が変わってた。

驚きですね。なんと、 window.setBackground(new Color(0,0,0,0)); で背景が透明なウィンドウが作れるようになってました。jre1.6ならcom.sun.awt.AWTUtilitiesのsetWindowOpaqueでなんかなぁ、的な感じで透過していたのに。そのほか、ウィンドウ全体の不透…

複合長方形を長方形で分割

どうも、一ヶ月ぶりです。月に一度の更新は目指していますが、書く内容がない(もしくは、書くのが面倒すぎる)という状況だったので放置してました。いや、JavaFX2.0(beta)でiTunesとかmacとかで画像を表示するときみたいな画像ビューアを作ったのをネタに…

AffinTransform

いっつも分からなくなるのでメモ。 A = A×Bにしたいとき A.concatenate(B) A = B ×Aにしたいとき A.preConcatenate(B) Rθをθ(rad)の回転行列とする A = A×Rθとしたい場合 A.rotate(θ) A=Rθ×Aが欲しいとき 手段無し。 (A.preConcatenate(AffineTransform.get…

高速フーリエ変換(FFT)の解説。実装編

前回のソース2を再帰呼び出しからループに変換してみる。例えば前回のように2097152個のデータを突っ込むと21階層もの再帰呼び出しになる。したがって、これをループに変換するってのは重要なことだ。

高速フーリエ変換(FFT)の解説。理論編

私はあまり画像を波長空間でフィルタリングとか言うことをやらないので、実のところ、今までFFTどころか離散フーリエ変換(DFT)すらしたこと無かった。というわけで、ちょっと調べてみたのでまとめてみようと思う。かなり長い記事になるよ。

画像のデータを格納する型は何が良い?

私は画像処理屋なのですが、ハードウェアに頼らず、Java側で画像処理をするとき漠然と「8bitならint型に詰め込む、16bitならlong型に詰め込む」とやってきていました。それってどれほど正しいのか?というわけで、ふいに思い立ったので計ってみた。 後述する…

読み込み中の画像を表示させる

↑というのがググっても出てこなかったのでやってみた。 Toolkit.createImageやApplet.getImageなどで画像を読み込むと非同期で読み込んでくれる。 この読み込み状況はGraphics.drawImageやImage.getWidthなどを呼び出して、ImageObserverを登録することで逐…

パッケージ外では実装できないインターフェースがあったらなぁ

インターフェースが無修飾関数を宣言できない点はJAVAのいけてない点の一つだと思っている。 もちろん、インターフェースは宣言された関数が実装されていることを保証するための物だから、そのインターフェースで宣言された関数は全てに見えなくてはならない…

GeneralPathとPathIteratorの諸注意

去年の10月に書いた記事マウスをShape(PathIterator)の形にドラッグ(移動)させようでNI-Lab.さんの記事をdisったら、まさか本人さんからうんこ喰らえやゴルァと………、すいません、嘘です 別にCloseするときに移動しなくても正しい結果出てね〜、と言われ…

いつかこうなったらいいなぁ…

コメントを残してきて、ふと思ったのでメモ。 Javaにはオートボクシングという機能があります。 私的にはJavaの失敗の一つだと思っていますけど。 オートボクシングは非常に中途半端なのです。 私はプリミティブか、ラッパークラスのどちらかを無くすべきだ…

クラスのFQCNな文字列-別解

id:ttmmrrさんがFQCNな文字列の取得法という実に真っ当なやり方をd:id:ttmmrr:20110220で解説なさっていたので、実はもっと簡単に邪道な方法で取得できるんじゃね?と FQCNはFully Qualified Class Nameだそうです。はじめてこの単語は知りました。 ちなみに…

オブジェクト指向初心者にありがちな後に後悔しない為の7の事inJAVA

私はプログラム歴2年と半、オブジェクト指向プログラミング(以下OOPと略記)歴1年とちょっとというかなり浅いプログラマーである。 私が一年前、OOP初心者時に書いたプログラム(1万行ぐらい)を現在誠意修正作業中なのだが、全く持って読めた物ではない。 こ…

final半端主義

final原理主義id:takahashikzn:20110122という記事があったので、私もだぁ〜と記事にしたくなった。 私も多々final宣言をする。 その中でも一番重要なメリットは、『意図していない代入を自動的にチェックできる』ということ。 賛成です。が、私はあまりこう…

バイナリーデータから画像の種類を判別する

というの↑が意外にもググっても出てこなかったので、ヘッダだけから種類を調べる簡易関数を作ってみた。 ImageType.java 対応フォーマットは JPEG PNG GIF BMP TIFF PICT です。関数は 関数 説明 getFormat(byte[] b) b:バイナリデータ getFormat(InputStrea…

AtomicIntegerを追ってみた

Atomic〜とか中身でsynchronizedしてるだけじゃね〜(´・∀・`) なんて思ってた。で、試す機会が来た。 import java.util.concurrent.atomic.AtomicInteger; public class Test{ //走らせるスレッドの数 static final int thread = 1000; //1つのスレッドの中で…

JAVA for-each文でカウント

ふらふらネットサーフィン(死語)をしているとひしだま氏のイテレーターでループするときに何度目かのループか?を知りたいときにどうするか、というトピックでこう書いてあった。 Java駄目メモ パターン3: これなら、素直にfor-each構文に変換することも可…

JAVAの嘘本当 配列メモリの確保は速い?

配列なんかで、JAVAはそもそもJVMで確保したメモリを配置するだけなんだから、メモリの確保は速いんだー、どんどん生成して使えば良いんだー、という意見を時々見る。というわけで、調べてみた。当方CPUはi5の3.2GHz,メモリはDDR3の何かだ。細かいことは忘れ…

JAVAでGOTOライク

指定したところへ一気に飛べるgoto文はプログラミングにおいて禁じ手とされている。可読性が下がるからだ。 そのため、JAVAにははじめからgoto文というものは存在しない しかし、こんな場合はどうだろう。読みにくかろう? if(〜){ boolean b=true;//以降の…

java.nioのBufferは速い?

java.nioのByteBufferについてちょっと調べてみた。 ByteBufferにはダイレクトバッファーと非ダイレクトバッファーの2種類がある。 ダイレクトバッファーはJVMの外の領域にメモリを確保し、非ダイレクトバッファーはメモリをJVM内に取る。 話ではダイレクト…

マウスをShape(PathIterator)の形にドラッグ(移動)させよう

今日はShape等の形に合わせてマウスを動かす話です。 マウスを複雑な形に動かしたり、ドラッグさせるにはShapeを使うのが簡単です。 あと、わざわざ記事にしたのは [Java]PathIterator を Point2D 配列へ変換する というNI-Lab’.sさんの古い記事が検索トップ…

BufferedImageのデータ配列をまるごと変更したかった

メモリ節約等の為にBufferedImageが使ってる配列を自分で用意したいんだけど、WritableRasterとやらが意味わかんない。 ブチギレした私はリフレクションしてむりやり変更してやった。 public class Test extends JComponent{ BufferedImage bf; public stati…

ディスられてた

ので、ディスりかえす。 かなり前の記事だが、 Java ? コンパイラの演算最適化 という記事で、シフト演算とビット演算調べてみたけど、大差ないじゃないか!といわれたので、馬鹿じゃねーのディスっておきます。(私の方の記事) public class Foo { public …

プログラムで履歴の実装のひな形

たぶん、これ以上履歴の構成が変更されることはないと思うのでこんな物を用意しておけば履歴は簡単に作成できるぞー、というのを載せてみる。