PC のフォント一覧とポストスクリプト名からJTableの標準化


  アプレットによる実装






クライアントの PC に、JRE または JDK の 6 がインストールされている場合のみ表示されます。

フォントそのものはかなり専門外なので良く解りませんが、PDF がらみで指定するフォント名で
ポストスクリプト名 が必要だったので、探したのですが、Java でしか見つからなかったので。

どうせ Java 環境無ければ動かないのだから、どうせなんでまったくやったことの無いアプレットで実装してみました。
Eclipse ですぐ実装はできたのですが、JTable があまりにもわけの解らない
仕様で動いているようなので標準化を行ないました。

その前に、二度としないであろうアプレットの WEB での実装方法ですが・・・

1) Eclipse から エクスポートで通常の JAR を作る( エラー警告は問題ありません )
2) アップロード
3) 以下の HTML
( アーカイブは複数書けるはずです )

  

<APPLET code="Swing_psname.class" style='width:500px;height:300px;'
	archive="psname.jar"
>
  

  JTable の標準化




一番の問題は、JTable から見た TabelColumn と dataModel が同期していないという所でした。
そもそも、addRow が JTable に無いとこらへんからそういう仕様なんでしょうが、
そのわりに全体をコントロールできそうなフィールドやメソッドがプロテクトだったり。

で、マニュアル・サンプルに何も書いて無いで、ある方向からだけ「動くでしょ?」てな、感じの悪いものでした。

以下、直接の問題点。

1) 全体から見ると、カラム名と ID と いう二つの識別がある
2) そのくせ ヘッダタイトル変更しただけで勝手に ID が変わる。
3) JTable から addColumn しても、dataModel は無視されてる

上記問題を裏付ける結果コードが以下

LboxTable.java
  

import javax.swing.*;
import javax.swing.table.*;


public class LboxTable extends JTable {

	public JScrollPane root = null;

	// ***************************************************
	// コンストラクタ
	// ***************************************************
	public LboxTable () {
		super(0,0);

		// テーブル作成と同時にスクロールを実装する
		this.root = new JScrollPane(this);

		// 必要な時にスクロールバーを表示する
		this.root.setVerticalScrollBarPolicy(
				JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
		this.root.setHorizontalScrollBarPolicy(
				JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

	}

	// ***************************************************
	// カラム追加
	// ***************************************************
	public void AddColumn(String name) {

		// まず JTable が直接管理しているカラムを作る。
		TableColumn col = new TableColumn();
		this.addColumn(col);

		// データモデルにも指定した名前で追加する
		((DefaultTableModel)this.dataModel).addColumn(name);

	}

	// ***************************************************
	// 行追加
	// ***************************************************
	public int AddRow( ) {

		// 追加は空で良い
		Object obj [] = null;

		// データモデルに追加
		((DefaultTableModel)this.dataModel).addRow(obj);

		// 追加された行番号を返す
		return this.getRowCount()-1;

	}

	// ***************************************************
	// カラム値の変更
	// ***************************************************
	public void SetColumnText( int nRow, String name, Object value ) {

		// 行位置、カラム位置で変更
		this.setValueAt(
			value,
			nRow,
			// カラム位置を ID から取得
			(this.getColumn(name)).getModelIndex()
		);

	}

	// ***************************************************
	// カラム幅の変更
	// ***************************************************
	public void SetColumnWidth( String name, int width ) {

		// 自動調整だと、変更しても反映されないので
		this.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );

		TableColumn tc = this.getColumn(name);
		tc.setPreferredWidth(width);

	}

	// ***************************************************
	// カラムタイトルの変更
	// ***************************************************
	public void SetColumnTitle( String name, String value ) {

		TableColumn tc = this.getColumn(name);
		// ヘッダをまず最初に変更
		tc.setHeaderValue(value);
		// ID が変更されてしまうので戻す
		tc.setIdentifier(name);

		// 再表示が必要
		this.tableHeader.resizeAndRepaint();

	}
}
  

  呼び出し側のソースコード

カラムは先に全部追加しておいてから変更します
( 仕様です。選択肢ありませんでした )

ソースの構造は、Visual Editor の仕様です。
( これも選択肢ありません )

  

import java.awt.*;
import javax.swing.*;
import javax.swing.JPanel;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Rectangle;
import java.awt.FlowLayout;
import java.awt.Insets;
import java.awt.CardLayout;
import javax.swing.JPopupMenu;
import javax.swing.JButton;
import java.awt.BorderLayout;
import javax.swing.BoxLayout;
import java.awt.Dimension;

public class Swing_psname extends JApplet {

	private LboxTable jTable = null;
	private JPanel jPanel = null;
	/**
	 * This is the xxx default constructor
	 */
	public Swing_psname() {
		super();
	}

	/**
	 * This method initializes this
	 *
	 * @return void
	 */
	public void init() {
		this.setSize(444, 299);
		this.setContentPane(getJPanel());
	}

	/**
	 * This method initializes jTable
	 *
	 * @return javax.swing.JTable
	 */
	private JScrollPane getJTable() {
		if (jTable == null) {

			jTable = new LboxTable();
			jTable.setName("jTable");

			jTable.AddColumn("FONT_NAME");
			jTable.AddColumn("PS_NAME");

			jTable.SetColumnTitle("FONT_NAME", "フォント名");
			jTable.SetColumnTitle("PS_NAME", "ポストスクリプト名");

		}


	// *****************************************************
	// フォント名とポストスクリプト名
	GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
	Font[] fontList = env.getAllFonts();
	for (int i = 0; i < fontList.length; i++) {
		int nRow = jTable.AddRow();
		jTable.SetColumnText(nRow, "FONT_NAME", fontList[i].getFontName());
		jTable.SetColumnText(nRow, "PS_NAME", fontList[i].getPSName());
	}
	// *****************************************************


		return jTable.root;
	}

	/**
	 * This method initializes jPanel
	 *
	 * @return javax.swing.JPanel
	 */
	private JPanel getJPanel() {
		if (jPanel == null) {
			jPanel = new JPanel();
			jPanel.setLayout(new BoxLayout(getJPanel(), BoxLayout.X_AXIS));
			jPanel.add(getJTable(), null);
		}
		return jPanel;
	}


}  //  @jve:decl-index=0:visual-constraint="18,10"
  




yahoo  google  MSDN  MSDN(us)  WinFAQ  Win Howto  tohoho  ie_DHTML  vector  wdic  辞書  天気 


[javaSwing]
claudebot
24/03/29 05:18:55
InfoBoard Version 1.00 : Language=Perl

1 BatchHelper COMprog CommonSpec Cprog CprogBase CprogSAMPLE CprogSTD CprogSTD2 CprogWinsock Cygwin GameScript HTML HTMLcss InstallShield InstallShieldFunc JScript JScriptSAMPLE Jsfuncs LLINK OldProg OracleGold OracleSilver PRO PRObrowser PROc PROconePOINT PROcontrol PROftpclient PROjscript PROmailer PROperl PROperlCHAT PROphp PROphpLesson PROphpLesson2 PROphpLesson3 PROphpfunction PROphpfunctionArray PROphpfunctionMisc PROphpfunctionString PROsql PROvb PROvbFunction PROvbString PROvbdbmtn PROvbonepoint PROwebapp PROwin1POINT PROwinSYSTEM PROwinYOROZU PROwindows ProjectBoard RealPHP ScriptAPP ScriptMaster VBRealtime Vsfuncs a1root access accreq adsi ajax amazon argus asp aspSample aspVarious aspdotnet aw2kinst cappvariety centura ckeyword classStyle cmaterial cmbin cmdbapp cmenum cmlang cmlistbox cmstd cmstdseed cmtxt cs daz3d db dbCommon dbaccess dnettool dos download flex2 flex3 flex4 framemtn framereq freeWorld freesoft gimp ginpro giodownload google hdml home hta htmlDom ie9svg install java javaSwing javascript jetsql jquery jsp jspTest jspVarious lightbox listasp listmsapi listmsie listmsiis listmsnt listmspatch listmsscript listmsvb listmsvc memo ms msde mysql netbeans oraPlsql oracle oracleWiper oraclehelper orafunc other panoramio pear perl personal pgdojo pgdojo_cal pgdojo_holiday pgdojo_idx pgdojo_ref pgdojo_req php phpVarious phpguide plsql postgres ps r205 realC realwebapp regex rgaki ruby rule sboard sc scprint scquest sdb sdbquest seesaa setup sh_Imagick sh_canvas sh_dotnet sh_google sh_tool sh_web shadowbox shgm shjquery shvbs shweb sjscript skadai skywalker smalltech sperl sqlq src systemdoc tcpip tegaki three toolbox twitter typeface usb useXML vb vbdb vbsfunc vbsguide vbsrc vpc wcsignup webanymind webappgen webclass webparts webtool webwsh win8 winofsql wmi work wp youtube