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

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

編集者:Terai Atsuhiro
作成日:2006-01-29
更新日:2023-02-19 (日) 20:24:38

概要

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

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

Swing調整中のネタ一覧

調整中

以下テスト中なので、Exceptionが発生したり、まともに動作しなくても(゚ε゚)キニシナイ!!


java - swing gui flickering white error - Stack Overflowのサンプルを試していたら面白い挙動に遭遇。

  • JDK1.7.0_21
    • IllegalArgumentException: Comparison method violates its general contract!
      Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Comparison method violates its general contract!
      	at java.util.TimSort.mergeLo(TimSort.java:747)
      	at java.util.TimSort.mergeAt(TimSort.java:483)
      	at java.util.TimSort.mergeCollapse(TimSort.java:410)
      	at java.util.TimSort.sort(TimSort.java:214)
      	at java.util.TimSort.sort(TimSort.java:173)
      	at java.util.Arrays.sort(Arrays.java:659)
      	at java.util.Collections.sort(Collections.java:217)
    • フレームのリサイズで上下左右に余白?
  • JDK1.6.0_41
    • フレームのリサイズで右と下に余白?
import java.awt.*;
import javax.swing.*;

public class Gui {
  public JComponent makeUI() {
    JPanel p = new JPanel(new GridLayout(22,12,10,10));
    p.setBackground(Color.WHITE);
    p.setBorder(BorderFactory.createLineBorder(Color.BLUE, 10));
    for (int i = 0; i < 22; i++) {
      for (int j = 0; j < 12; j++) {
        JLabel label = new JLabel();
        label.setBorder(BorderFactory.createLineBorder(Color.RED));
        label.setBackground(Color.GRAY);
        label.setOpaque(true);
        //label.setPreferredSize(new Dimension(50, 50));
        p.add(label);
      }
    }
    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 Gui().makeUI());
    f.setSize(320, 240);
    //f.pack();
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }
}

JMenuBarを検索してJRadioButtonMenuItemに、ActionListenerを追加

Arrays.stream(menuBar.getSubElements())
  .flatMap(new Function<MenuElement, Stream<MenuElement>> () {
      @Override public Stream<MenuElement> apply(MenuElement me) {
          MenuElement[] sub = me.getSubElements();
          if (sub.length != 0) {
              return Arrays.stream(sub).flatMap(sme -> apply(sme));
          } else {
              return Stream.of(me);
          }
      }
  })
  .filter(mi -> mi instanceof JRadioButtonMenuItem)
  .forEach(mi -> ((JRadioButtonMenuItem) mi).addActionListener(al));

検討中で未実装

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

メモ

  • JTree Table
  • JPopupMenu BlankIcon
  • UIDefaults ProxyLazyValue
  • JTable setSurrendersFocusOnKeystroke
  • File createTempFile
  • JTable Vertical Table Header
  • File getTotalSpace, getFreeSpace, getUsableSpace
  • JTabbedPane tab height animation
  • Formatter and password char
  • Cells with rouded corners in JTable
  • Tearaway tabs
  • Multi selection JComboBox
  • JSplitPane hide unhide tab
  • JScrollBar BlockIncrement
  • JScrollPane MapView subview
  • JDesktopPane JInternalFrame Tab Loop
  • JTabbedPane ScrollButton Layout
  • JTabbedPane Transparency
  • JTextField(search) in JButton(Tab, ButtonBar)
  • switch JInternalFrame to JTabbedPane
  • JTree Nimbus Selection Rect
  • Highlighter#removeAllHighlights()
  • http://docs.oracle.com/javase/jp/7/api/javax/swing/text/html/HTMLDocument.html#getIterator(javax.swing.text.html.HTML.Tag)

Swing 修正予定・検討メモ

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

  • Swing Tipsのみ分離して、Markdown、静的サイト生成に移行できないか検討中
    • http://terai.xrea.jp/index.html で、Jekyll BootstrapDISQUSのテスト中
    • Jekyll、タグ付け
    • inline<code>タグ
      • JDK 1.6.0_10などのアンダーライン
      • new JPanel()などの翻訳拒否
      • 人名?
  • https://sites.google.com/site/javaswingtips/ は、500ページ近く手動でアップロードすることになりそうなので無理かも
  • ソースコード
    • Wiki中のサンプルコードでクラスなどをjavadocに自動リンク
    • 日本語、文字コード
  • 簡単にコンパイル、実行
    • Ant(build.xml)、バッチファイル、シェルスクリプトの改良
      • build.xml の整理
    • NetBeans (Eclipse) .classpath、.projectの追加
    • src.zipのファイル名を、それぞれ適当なものに変更?
  • 各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
  • TableSorter.javaをJDK6のTableRwoSorterに置き換える
    • ソートする意味のないサンプルで使用しているTableSorter.javaは削除
  • スクリーンショット
    • すべて撮り直す(prefixのコロン:)
    • screenshot一覧ページの分割、画像サイズ削減
    • キャッシュ一覧で探しやすいように、タイトルの頭に「サ:」(サンプル)を付けていたのを、「JST 」(Java Swing Tips)に変更
    • 日本標準時ではない…
  • 分類
    • JTableのTipsを分割
    • ソースを一つにまとめる(ワンクリックで全ソースコードを表示したい)ためにTestModel.javaを検索してpackageプライベートなクラスに変更中
      >find . -type f -name TestModel.java -ls | gawk "{print $7, $11}" | sort
    • Look&Feel関係でpublic クラスでないとダメなのは…、放置。

リンクメモ(自分用)

Bugリンクメモ(自分用)

メモ: 痒いところに手が届かないJavaのコード

初期化時にデッドロックの可能性があるからということで、それはいいとして。
代わりに使うのが
Logger.getLogger(Logger.GLOBAL_LOGGER_NAME)
だなんて、どうにかしてほしい。
Logger.getGlobal()
を用意してくれればいいのに。なに考えてんだろう?EoDじゃなかったの?
Javaのコード書きにくさって、静的動的よりも、こういう痒いところに手が届かないことの積み重ねが大きいと思う。

Swing関係

  • 表の全行を削除するメソッド
    • 表の全行を削除する場合、DefaultTableModel#setRowCount(0);ではなく、もっと分かりやすいメソッドが欲しい。
    • 例えばDefaultComboBoxModel#removeAllElements()DefaultListModel#clear()のような(これはこれでどれかひとつに統一して欲しい…)。
  • フレームを画面中央に表示するメソッド
    • フレームを画面中央に表示する場合、Window#setLocationRelativeTo(null);ではなく、もっと分かりやすいメソッドが欲しい。
    • JavaFX Scriptでは、centerOnScreen: trueが用意されていたが…。