来週のネタとか(゚ε゚)

編集者:Terai Atsuhiro
作成日:2006-01-29
更新日:2010-02-09 (Tue) 02:10:05

概要

Swing関係の自分用のメモとかネタ帳みたいなものです。

移動: ネタのリクエスト、Swingのサンプルに関するメモ

Swing調整中のネタ一覧

調整中

Web Start でも大丈夫かなどをテスト中。リストからの削除、内容の変更、Exceptionの発生があっても(゚ε゚)キニシナイ!!

  • Launch Swing/DropOnTabTitle?
  • Launch Swing/DefaultLookAndFeelDecorated?
  • Launch Swing/NonEditableLine?
  • Launch Swing/NoArrowButtonCellEditor?
  • Launch Swing/UninstallListeners?
  • Launch Swing/UIDefaultsOverrides?
  • Launch Swing/ProgressMonitor?


検討中で未実装

こっそり消えても(゚ε゚)キニシナイ!!

  • Swing/TitledSeparator?
  • Swing/Clipboard?
  • Swing/FileChooserWithOptionPane?
    • %JAVA_HOME%\demo\jfc\FileChooserDemo\src\FileChooserDemo.java
    • %JAVA_HOME%\demo\jfc\SwingSet2\src\FileChooserDemo.java

テスト

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
class DocumentFilterTest {
  public JComponent makeUI() {
    JTextArea textArea = new JTextArea();
    ((AbstractDocument)textArea.getDocument()).setDocumentFilter(
      new FirstCharToUpperCaseDocumentFilter(textArea));
    textArea.insert("asdfasdfasdfasdfasdf", 0);
    JPanel p = new JPanel(new BorderLayout());
    p.add(new JScrollPane(textArea));
    return p;
  }
  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      @Override public void run() {
        createAndShowGUI();
      }
    });
  }
  public static void createAndShowGUI() {
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.getContentPane().add(new DocumentFilterTest().makeUI());
    f.setSize(320, 240);
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }
}
class FirstCharToUpperCaseDocumentFilter extends DocumentFilter {
  private final JTextComponent textArea;
  FirstCharToUpperCaseDocumentFilter(JTextComponent textArea) {
    super();
    this.textArea = textArea;
  }
  @Override public void insertString(FilterBypass fb, int o, String s,
                             AttributeSet a) throws BadLocationException {
       System.out.println("insertString");
       if(s==null) return;
       replace(fb, o, 0, s, a);
  }
  @Override public void remove(FilterBypass fb, int o, int l)
                                    throws BadLocationException {
    System.out.println("remove");
    Document doc = fb.getDocument();
    if (o==0 && doc.getLength()-l>0) {
      fb.replace(0, l+1, doc.getText(l, 1).toUpperCase(), null);
      textArea.setCaretPosition(0);
    } else {
      fb.remove(o, l);
    }
  }
  @Override public void replace(FilterBypass fb, int o, int l, String s,
                                AttributeSet a) throws BadLocationException {
    System.out.println("replace");
    if (o==0 && s.length()>0) {
      s = s.substring(0,1).toUpperCase()+s.substring(1);
    }
    fb.replace(o, l, s, a);
  }
}

あとで消すメモ

  • JTableHeader + KeyEvent.VK_SPACE Windows XP(日本語?)+JDK 1.6.0_17 では、F8キーでJTableHeaderにフォーカスを移動して、SPACEキーを押してもソートされない? 以下のように設定しても、KeyEvent.VK_SPACEはうまくいかない。KeyEvent.VK_F9とかなら大丈夫。
    InputMap im = table.getTableHeader().getInputMap(
        JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
    im.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0), "toggleSortOrder");
    
    キーボードが壊れたのかもと思ったけど、JDK 1.7.0 では、問題なく動作している?。暇なときに、Bug Database を調べること。

Google Document Viewer

Swing 修正予定・検討メモ

実際にやるかどうかは未定ですが、今後Swing Tipsを改良したいと思っていることをメモしています*1

  • xrea+を移動
    • svnが使用できるはず
  • スパム対策
    • 英数のみのコメント禁止 別の対策を導入 再度英数のみのコメント禁止
  • ソースコード
    • TableSorter.javaをJDK6のTableRwoSorterに置き換える
      • ソートする意味のないサンプルで使用しているTableSorter.javaは削除
    • リポジトリ(Subversion)を公開(JavaForge、sourceforge.jpとか調べる)
      • もしくは全ソースコードの一括ダウンロードを簡単に(wgetなどの対策)
      • Mercurial にするかも
    • SwingSet2 SwingSet3のようにサンプルプログラムからソースコードを閲覧できるように?
    • Wiki中のサンプルコードでクラスなどをjavadocに自動リンク
    • 適当すぎる文字列("aaaaaaaa"とか、"ちとしはちとしは"など)をなんとかする
    • 日本語、文字コード
  • Swing、Java2D、javaFXなどDesktop関係専用の質問掲示板(日本語)
    • いい掲示板を探すor作ってもらう
    • 質問者が画像、スクリーンショットを貼れる
      • UIの質問には是非欲しい(ただしグロ除けで管理者が認証)
    • 質問者がソースコード、JWS(jnlp)などが投稿できるように
      • 質問内容を把握できるサンプルを、SandBox内で安全に実行
    • OS、Javaのバージョンが簡単に入力できる
      • 入力しないと投稿できないでも可
    • 質問が解決してもCloseしない
    • できれば検索機能が充実したもの
    • 管理者、回答者などが勝手にタイトル変更or分類可能
      • 「タイトル: 教えてください」除け
    • 匿名で回答は可、匿名で質問は不可
    • メールアドレスなどを登録している回答者には、質問者はポイント付与できる
  • スクリーンショット
    • すべて撮り直す(prefixのコロン:)
    • 自動更新
    • screenshot一覧ページの分割、画像サイズ削減
    • サンプルアプリのタイトルを修正(英語化?)してスクリーンショット全部取り直し
      • キャッシュ一覧で探しやすいように、タイトルの頭に「サ:」(サンプル)を付けていたのを、「JST 」(Java Swing Tips)に変更
      • 日本標準時ではない…
  • 独自ドメインへの移行
    • 検索エンジン対策
    • 現状ではterai.s55.xrea.comの時みたいに、また八分+全消しボーナスを食らう可能性がある(理由も不明だし)
      • ペナルティは、ウェブマスターツールで調べれば、ある程度判るようになっている
      • s55.xrea.comなどが、八分られたのは、存在しないページが404を返さずに200でxreaのトップに飛ぶようになっていた(自信無し)から?
    • Swing Tipsのみ分離
  • 簡単にコンパイル、実行
    • Ant(build.xml)、バッチファイル、シェルスクリプトの改良
      • build.xml の整理
    • NetBeans (Eclipse) .classpath、.projectの追加
    • src.zipのファイル名を、それぞれ適当なものに変更?
  • 公開予定日
    • 先にページを作っておいて、指定した日時が来たら自動的に公開
  • 各Tipsの難易度表示
    • こちらで適当に評価するか、ユーザに評価してもらうか…
    • レーティングバー
  • 分類
    • Animationの一部をTransitionに分離
    • JTableを2つに分割
    • JTableのTipsを分割
  • Web Start
    • 「プログラムの追加と削除」に登録されない方法を探す
      • キャッシュを無効にする
    • UI操作無しで全部削除できる方法を探す
      • javaws -uninstall
    • 起動時にスプラッシュスクリーンを表示しない方法を探す
      • javaws -Xnosplash <jnlp>
  • バージョン
    • JDK 6 と JDK 1.6 どちらかに揃える

変更済み

  • ソースコード、FindBugs, PMD
  • ソースコード、Ubuntuなどでも実行できるように
    • e.isPopupTrigger()を使ってJPopupMenuを表示している箇所(JDK 5 以前のソース)を、すべてsetComponentPopupMenuに変更する。
  • ソースコード、1.5以上対応に変更
  • Color クラスにおける定数の大文字化
  • ソースコード、codeプラグインで色分け
  • ソースコード、build.xmlなどをすべてUTF-8化
  • バッチファイルの代わりにantのタスクを使うように変更
    • antのbuild.xmlにrunタスクを追加、ただしバッチファイルも残すことに
  • sampleをexampleに統一
  • Swing/JarFileAntの下に移動する
  • 分類: JTree JButton

リンクメモ(自分用)


*1 順不同