ソフトウェア開発したい日記

「面白い!」と思った頭の体操や、数学の問題を載せていきます
その他ロードバイクででかけた先の写真や、ソフト開発のメモ等

JFileChooserで、拡張子を自動で必要に応じてつけたい

2011年07月05日 22時22分10秒 | ソフト開発日記
JFileChooserでファイルを保存するとき、
ユーザが自分で拡張子を書いても(既存の拡張子のファイルを上書きしようとしても)
ユーザがファイル名だけを書いても、同じ結果にしたかったので、やり方メモ。
(例えば「memo」と書いても「memo.txt」と書いても、
「memo.txt」と保存されるようにしたいわけです。)

Chooserに入力されたファイルのインスタンスをfileとすると
PrintWriter pw = new PrintWriter(file + ".dat");
とすれば、拡張子に「.txt」が入力される。

あとはsubstring()メソッドを使って、末尾4文字が「.txt」かどうかをチェックし、場合分け。
まとめると以下のとおり。
なんかもっと楽にやる方法がありそう。
けれどこの方法も別に煩雑ではないので、とりあえずはこれで良しとします。


JFileChooser fc = new JFileChooser();
FileNameExtensionFilter ff = new FileNameExtensionFilter("テキストファイル", "txt");
fc.setFileFilter(ff);

int retval = fc.showSaveDialog(this);
if (retval != JFileChooser.APPROVE_OPTION) {
return;
}

File file = fc.getSelectedFile();

try {
PrintWriter pw;
if (file.toString().substring(file.toString().length() - 4).equals(".txt")) {
pw = new PrintWriter(file);
} else {
pw = new PrintWriter(file + ".txt");
}
pw.println("てすと");
pw.close();

}catch(IOException e){
}

パッケージ org.jdesktop.layout は存在しません。

2011年07月04日 19時39分24秒 | ソフト開発日記
Dropbox上に開発しているソフトのプロジェクトフォルダを置いて、
NetBeansでMac→Windows→Macと交互にプロジェクトを開くと、必ず

「パッケージ org.jdesktop.layout は存在しません。」

というエラーが出てきてしまう。
Classpathがおかしなことになってしまうのかな。
よくわかんないけどプロジェクトを複製するとエラーが解消される。
とりあえずこれでいいや。

NetBeansの分割区画の使い方

2011年06月25日 16時33分29秒 | ソフト開発日記
画面分割して、分割位置をマウスドラッグで移動させたりしたいな~
と思ってNetBeansのパレットを見てたら「分割区画」を発見。
ということで分割区画(JSplitPane)の使い方メモ。

分割区画をGUIデザイナ上に配置すると、
「左ボタン、右ボタン」
というのが出てきました。

この左ボタン、右ボタンというところに
ラベルはパネルをドラッグで配置したら、分割区画が作れました。お手軽。

初期分割位置は、プロパティの「dividerLocation」
位置を調整するドラッグ領域の大きさは、「dividerSize」
横に分割するか縦に分割するかは、「orientation」
で簡単にできました。

また、分割区画に対してrepaint()をしてやれば
それぞれのrepaint()が呼び出されて再描画されました。
分割区画にはめ込んだコンポーネントに対してのみのrepaint()はうまくいきませんでした。何故だろう。

Javaでコントラスト調整とか

2011年06月04日 16時14分31秒 | ソフト開発日記
今までは、コントラスト値を変更するたびに
画素値が入った配列をスケーリング計算して、
drawLine()で点を打つという愚かな方法をとってました。

BufferedImageを利用して簡単・高速にコントラスト調整する方法を見つけたので、メモ。
RescaleOPクラスを利用します。
また、今回はグレースケール画像に対してなので
bufferedImageのimageTypeを"TYPE_BYTE_GRAY"としています。


BufferedImage buffer1, buffer2;
public void paintComponent(Graphics g) {
super.paintComponent(g);

Graphics2D g2 = (Graphics2D)g;
if(buffer1 == null){
buffer1 = new BufferedImage(this.getWidth(), this.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
buffer2 = new BufferedImage(this.getWidth(), this.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
}
Graphics2D buf = buffer.createGraphics();

/**
初回のみbuf.drawLine()で点を打っていく。
(あるいは画像を読み込む。)
*/

RescaleOP rop = new RescaleOP(scale, 0.0f, null);
rop.filter(buffer1, buffer2);
g2.drawImage(buffer2, 0, 0, this);

}

float型の変数scaleは初期値1.0fで、
スライダ等で0.0f~2.0fくらい変動できるようにしたらいい感じになりました。