▼質問
ポップアップメニューを、タイトル名と選択メニューの間にセパレーターを挟んだ感じで表示したいんだ。
どうしたらいいんだ?
▼回答
サンプルだよ!参考にしてくれ!!表示したいコンポーネントのマウスクリックイベントに追加すれば
右クリックで表示されるよ。
if ( javax.swing.SwingUtilities.isRightMouseButton(e) ) {
// 右クリック時の処理
JPopupMenu popupMenu = new JPopupMenu();
JLabel label = new JLabel( "タイトル");
label.setAlignmentX( JPopupMenu.CENTER_ALIGNMENT );
label.setHorizontalAlignment( JLabel.CENTER );
label.setFont( new java.awt.Font( "Monospaced", java.awt.Font.BOLD, 14 ) );
popupMenu.add( label );
JSeparator[] separator = new JSeparator[2];
for ( int i = 0 ; i < separator.length ; i++ ) {
separator[i] = new JSeparator( SwingConstants.HORIZONTAL );
popupMenu.add( separator[i] );
}
JMenuItem menuItem = new JMenuItem( "選択メニュー" );
menuItem.setHorizontalAlignment( JLabel.LEFT );
menuItem.setFont( new java.awt.Font( "Monospaced", java.awt.Font.PLAIN, 12 ) );
menuItem.setActionCommand( "選択メニュー" );
popupMenu.add( menuItem );
menuItem.addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseClicked( java.awt.event.MouseEvent evt ) {
// マウスがクリックされたときのイベント処理
}
});
menuItem.addMouseListener( new java.awt.event.MouseAdapter() {
public void mousePressed( java.awt.event.MouseEvent evt ) {
// コンポーネント上でマウスボタンが押されると呼ばれるイベント処理
}
});
menuItem.addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseReleased( java.awt.event.MouseEvent evt ) {
// コンポーネント上でマウスボタンが放されると呼ばれるイベント処理
}
});
if ( e.isPopupTrigger() ) {
popupMenu.show( e.getComponent(), e.getX(), e.getY() );
}
} else if( javax.swing.SwingUtilities.isMiddleMouseButton(e) ) {
// 中ボタンクリック時の処理
} else if( javax.swing.SwingUtilities.isLeftMouseButton(e) ) {
// 左クリック時の処理
}
金曜日, 2月 16, 2007
木曜日, 2月 15, 2007
[Java]コンポーネントの操作不可
■JButton
JButton.setEnabled( false );
■JTextField
JTextField.setEditable( false );
■JSpinner
((JSpinner.DefaultEditor)JSpinner.getEditor()).getTextField().setEditable( false );
JSpinner.getComponent(0).setEnabled( false );
JSpinner.getComponent(1).setEnabled( false );
イベント処理でチェックが必要!
JSpinner.getComponent(1).addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseClicked( java.awt.event.MouseEvent evt ) {
if ( !evt.getComponent().isEnabled() ) return;
}
});
■JCheckBox
JCheckBox.setEnabled( false );
■JFormattedTextField
JFormattedTextField.setEditable( false );
JButton.setEnabled( false );
■JTextField
JTextField.setEditable( false );
■JSpinner
((JSpinner.DefaultEditor)JSpinner.getEditor()).getTextField().setEditable( false );
JSpinner.getComponent(0).setEnabled( false );
JSpinner.getComponent(1).setEnabled( false );
イベント処理でチェックが必要!
JSpinner.getComponent(1).addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseClicked( java.awt.event.MouseEvent evt ) {
if ( !evt.getComponent().isEnabled() ) return;
}
});
■JCheckBox
JCheckBox.setEnabled( false );
■JFormattedTextField
JFormattedTextField.setEditable( false );
水曜日, 2月 07, 2007
[Java]ファイル入出力ストリーム関連
public int FileRead( String fname ) {
int ret = 0;
BufferedReader reader = null;
if ( fname == null ) return -1;
try {
reader = new BufferedReader( new FileReader( fname ) );
String line = null;
while ( (line = reader.readLine()) != null ) {
System.out.println( line );
ret++;
}
}
catch ( FileNotFoundException e ) {
System.out.println( "ファイルが見つかりません。" );
ret = -2;
}
catch ( IOException e ) {
System.out.println( "入出力エラーです。" );
ret = -3;
}
finally {
try {
if ( reader != null ) reader.close();
}
catch ( Exception e ) {}
}
return ret;
}
int ret = 0;
BufferedReader reader = null;
if ( fname == null ) return -1;
try {
reader = new BufferedReader( new FileReader( fname ) );
String line = null;
while ( (line = reader.readLine()) != null ) {
System.out.println( line );
ret++;
}
}
catch ( FileNotFoundException e ) {
System.out.println( "ファイルが見つかりません。" );
ret = -2;
}
catch ( IOException e ) {
System.out.println( "入出力エラーです。" );
ret = -3;
}
finally {
try {
if ( reader != null ) reader.close();
}
catch ( Exception e ) {}
}
return ret;
}
火曜日, 1月 16, 2007
[JavaScript]
currentElementNo = 0;
function nextElement( keyCode ) {
if (keyCode == 13) {
currentElementNo++;
currentElementNo %= document.formA.elements.length;
if ( document.formA.elements[currentElementNo].type != 'button') {
document.formA.elements[currentElementNo].focus();
} else {
currentElementNo++;
}
}
}
HTML部
'<'body onkeydown="nextElement(event.keyCode); return true;">
function nextElement( keyCode ) {
if (keyCode == 13) {
currentElementNo++;
currentElementNo %= document.formA.elements.length;
if ( document.formA.elements[currentElementNo].type != 'button') {
document.formA.elements[currentElementNo].focus();
} else {
currentElementNo++;
}
}
}
HTML部
'<'body onkeydown="nextElement(event.keyCode); return true;">
土曜日, 1月 13, 2007
[Java]メモ4
▼質問
splitメソッドでピリオドを指定すると配列が返ってこないんだ?どうやって指定すればいいの?!
ピリオドは、プログラムで重要な意味を持っているのはわかるんだが・・・。
String value = "1.2";
String[] splits = value.split( "." );
▼回答
¥マークを頭に二つ付ければよいようだ。
String value = "1.2";
String[] splits = value.split( "¥¥." );
■参考サイト
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=19125&forum=12&3
▼質問
ラベルをボタンスタイルに表示することは可能なの?
▼回答
可能だよ!
setBorderメソッドを使えばボタンをしたラベルが作成できるんだ。
クリックされたイベントもaddMouseListenerで登録すればボタン(ラベル)がクリックした時の
処理もすることができるんだ。
下記のプログラムは、種別によってスタイルを変えたいときに使用できる.
ボタン(ラベル)の上にきた時に種別1で呼び出してボタンが選択された状態にするのに使用できる.
private void setLabelStyle( JLabel label, int kind ) {
if ( kind == 1 ) {
label.setBorder( new CompoundBorder( new LineBorder( Color.RED, 3 ),
new BevelBorder( BevelBorder.RAISED ) ) );
}
else {
label.setBorder( new CompoundBorder( new LineBorder( Color.BLACK, 2 ),
new BevelBorder( BevelBorder.RAISED ) ) );
}
}
▼質問
「-Infinity」って何だ?
▼回答
「Infinity」は、無限大という文字列らしい。
正の無限大は「Infinity」で、負の無限大は「-Infinity」となるらしい。
■参考サイト
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/Double.html
splitメソッドでピリオドを指定すると配列が返ってこないんだ?どうやって指定すればいいの?!
ピリオドは、プログラムで重要な意味を持っているのはわかるんだが・・・。
String value = "1.2";
String[] splits = value.split( "." );
▼回答
¥マークを頭に二つ付ければよいようだ。
String value = "1.2";
String[] splits = value.split( "¥¥." );
■参考サイト
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=19125&forum=12&3
▼質問
ラベルをボタンスタイルに表示することは可能なの?
▼回答
可能だよ!
setBorderメソッドを使えばボタンをしたラベルが作成できるんだ。
クリックされたイベントもaddMouseListenerで登録すればボタン(ラベル)がクリックした時の
処理もすることができるんだ。
下記のプログラムは、種別によってスタイルを変えたいときに使用できる.
ボタン(ラベル)の上にきた時に種別1で呼び出してボタンが選択された状態にするのに使用できる.
private void setLabelStyle( JLabel label, int kind ) {
if ( kind == 1 ) {
label.setBorder( new CompoundBorder( new LineBorder( Color.RED, 3 ),
new BevelBorder( BevelBorder.RAISED ) ) );
}
else {
label.setBorder( new CompoundBorder( new LineBorder( Color.BLACK, 2 ),
new BevelBorder( BevelBorder.RAISED ) ) );
}
}
▼質問
「-Infinity」って何だ?
▼回答
「Infinity」は、無限大という文字列らしい。
正の無限大は「Infinity」で、負の無限大は「-Infinity」となるらしい。
■参考サイト
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/Double.html
土曜日, 12月 23, 2006
[Java]Collection
▼質問
Mapオブジェクトを復帰値として可変で返却しているんだ。それを連続で格納しているんだけど
うまくかないんだ?
▼回答
Mapは、keyとvalueを組にして要素として保持しているからだよ!
Mapは、要素の順番を保持しなかったり、同一keyの要素は複数保持できなかったりするから
使い方には気をつけたほうがいいぞ。
前回値をclearメソッドで削除していなかったのが原因だったみたい。
例1)
TestMap testMap = new TestMap();
Map map = testMap.getMap();
例2)
TestMap testMap = new TestMap();
Map map = new HashMap();
map.putAll( testMap.getMap() );
上の2つのやり方は同じ結果が得られる。
■参考サイト
http://www.atmarkit.co.jp/fjava/javatips/098java012.html
Mapオブジェクトを復帰値として可変で返却しているんだ。それを連続で格納しているんだけど
うまくかないんだ?
▼回答
Mapは、keyとvalueを組にして要素として保持しているからだよ!
Mapは、要素の順番を保持しなかったり、同一keyの要素は複数保持できなかったりするから
使い方には気をつけたほうがいいぞ。
前回値をclearメソッドで削除していなかったのが原因だったみたい。
例1)
TestMap testMap = new TestMap();
Map map = testMap.getMap();
例2)
TestMap testMap = new TestMap();
Map map = new HashMap();
map.putAll( testMap.getMap() );
上の2つのやり方は同じ結果が得られる。
■参考サイト
http://www.atmarkit.co.jp/fjava/javatips/098java012.html
土曜日, 12月 09, 2006
[Java]Look&Feel
// 外観を設定します
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (ClassNotFoundException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
} catch (InstantiationException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
} catch (IllegalAccessException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
} catch (UnsupportedLookAndFeelException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
}
// 外観を変更します
SwingUtilities.updateComponentTreeUI(this);
// サブコンポーネントの推奨サイズおよびレイアウトに合わせて
// この Window をサイズ変更するように設定
pack();
■参考サイト
http://www.hellohiro.com/swinglookandfeel.htm
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (ClassNotFoundException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
} catch (InstantiationException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
} catch (IllegalAccessException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
} catch (UnsupportedLookAndFeelException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
}
// 外観を変更します
SwingUtilities.updateComponentTreeUI(this);
// サブコンポーネントの推奨サイズおよびレイアウトに合わせて
// この Window をサイズ変更するように設定
pack();
■参考サイト
http://www.hellohiro.com/swinglookandfeel.htm
木曜日, 11月 30, 2006
火曜日, 11月 28, 2006
[Java]Calendarクラス
▼質問
日付を表示するダイアログ内でCalendarクラスをaddしたんだけど次のエラーが出るんだ!?
Calendar calendar = Calendar.getInstance();
calendar = (Calendar)パラメータでもらったCalendarオブジェクト変数.clone();
calendar.add( Calendar.DATE, 1 );
java.lang.NullPointerException
at java.util.GregorianCalendar.getCurrentFixedDate(Unknown Source)
at java.util.GregorianCalendar.add(Unknown Source)
▼回答
時刻に変更したら回避できた?!なぜ?
calendar.add( Calendar.HOUR_OF_DAY, 24 );
▼質問
1970/01/01 00:00:00 からの通算秒をカレンダーオブジェクトに変換するにはどうするの?
▼回答
下記のようにすれば1970/01/01 00:00:00からの通算秒が設定できる。
Calendar calendar = Calendar.getInstance( TimeZone.getTimeZone( "JST" ) );
calendar.set( Calendar.YEAR, 1970 );
calendar.set( Calendar.MONTH, 0 );
calendar.set( Calendar.DATE, 1 );
calendar.set( Calendar.HOUR_OF_DAY, 0 );
calendar.set( Calendar.MINUTE, 0 );
calendar.set( Calendar.SECOND, 0 );
calendar.set( Calendar.MILLISECOND, 0 );
calendar.add( Calendar.SECOND, 通算秒 );
又は、
Calendar calendar = Calendar.getInstance( TimeZone.getTimeZone( "JST" ) );
calendar.setTimeInMillis( 0 );
calendar.add( Calendar.SECOND, 通算秒 );
日付を表示するダイアログ内でCalendarクラスをaddしたんだけど次のエラーが出るんだ!?
Calendar calendar = Calendar.getInstance();
calendar = (Calendar)パラメータでもらったCalendarオブジェクト変数.clone();
calendar.add( Calendar.DATE, 1 );
java.lang.NullPointerException
at java.util.GregorianCalendar.getCurrentFixedDate(Unknown Source)
at java.util.GregorianCalendar.add(Unknown Source)
▼回答
時刻に変更したら回避できた?!なぜ?
calendar.add( Calendar.HOUR_OF_DAY, 24 );
▼質問
1970/01/01 00:00:00 からの通算秒をカレンダーオブジェクトに変換するにはどうするの?
▼回答
下記のようにすれば1970/01/01 00:00:00からの通算秒が設定できる。
Calendar calendar = Calendar.getInstance( TimeZone.getTimeZone( "JST" ) );
calendar.set( Calendar.YEAR, 1970 );
calendar.set( Calendar.MONTH, 0 );
calendar.set( Calendar.DATE, 1 );
calendar.set( Calendar.HOUR_OF_DAY, 0 );
calendar.set( Calendar.MINUTE, 0 );
calendar.set( Calendar.SECOND, 0 );
calendar.set( Calendar.MILLISECOND, 0 );
calendar.add( Calendar.SECOND, 通算秒 );
又は、
Calendar calendar = Calendar.getInstance( TimeZone.getTimeZone( "JST" ) );
calendar.setTimeInMillis( 0 );
calendar.add( Calendar.SECOND, 通算秒 );
土曜日, 11月 11, 2006
[Java]オブジェクトのコピー
▼質問
クラス間でメソッドのパラメータにクラスオブジェクト渡しているんだけど、そのオブジェクトが
完全な独立した形でコピーされないんだ?どうしたらいいの?!
▼回答
cloneメソッドを実装しなくてはいけないようだ!?
複写の方法にも2つの方法があるようだ。
1.シャローコピー(shallow copy)変数共有系?
2.ディープコピー(deep copy)完全独立系?
・・・・
■参考サイト
オブジェクトの複写
http://www.asahi-net.or.jp/~DP8T-ASM/java/tips/ObjectCopy.html
クラス間でメソッドのパラメータにクラスオブジェクト渡しているんだけど、そのオブジェクトが
完全な独立した形でコピーされないんだ?どうしたらいいの?!
▼回答
cloneメソッドを実装しなくてはいけないようだ!?
複写の方法にも2つの方法があるようだ。
1.シャローコピー(shallow copy)変数共有系?
2.ディープコピー(deep copy)完全独立系?
・・・・
■参考サイト
オブジェクトの複写
http://www.asahi-net.or.jp/~DP8T-ASM/java/tips/ObjectCopy.html
金曜日, 11月 10, 2006
[Java]イベントテンプレート
■キーイベント
JFormattedTextField textField = new JFormattedTextField();
textField.addKeyListener( new java.awt.event.KeyAdapter() {
public void keyTyped( java.awt.event.KeyEvent evt ) {
// キーが入力された時の処理
JFormattedTextField tf = (JFormattedTextField)evt.getComponent();
System.out.println( tf.getText() );
}
});
JFormattedTextField textField = new JFormattedTextField();
textField.addKeyListener( new java.awt.event.KeyAdapter() {
public void keyReleased( java.awt.event.KeyEvent evt ) {
// キーが放された時の処理
JFormattedTextField tf = (JFormattedTextField)evt.getComponent();
System.out.println( tf.getText() );
}
});
■フォーカスイベント
JFormattedTextField textField = new JFormattedTextField();
textField.addFocusListener( new java.awt.event.FocusAdapter() {
public void focusLost( java.awt.event.FocusEvent evt ) {
// フォーカスを失った時の処理
JFormattedTextField tf = (JFormattedTextField)evt.getComponent();
System.out.println( tf.getText() );
}
});
JFormattedTextField textField = new JFormattedTextField();
textField.addKeyListener( new java.awt.event.KeyAdapter() {
public void keyTyped( java.awt.event.KeyEvent evt ) {
// キーが入力された時の処理
JFormattedTextField tf = (JFormattedTextField)evt.getComponent();
System.out.println( tf.getText() );
}
});
JFormattedTextField textField = new JFormattedTextField();
textField.addKeyListener( new java.awt.event.KeyAdapter() {
public void keyReleased( java.awt.event.KeyEvent evt ) {
// キーが放された時の処理
JFormattedTextField tf = (JFormattedTextField)evt.getComponent();
System.out.println( tf.getText() );
}
});
■フォーカスイベント
JFormattedTextField textField = new JFormattedTextField();
textField.addFocusListener( new java.awt.event.FocusAdapter() {
public void focusLost( java.awt.event.FocusEvent evt ) {
// フォーカスを失った時の処理
JFormattedTextField tf = (JFormattedTextField)evt.getComponent();
System.out.println( tf.getText() );
}
});
木曜日, 10月 19, 2006
[SQL関連]文字列操作
▼質問
テーブルでDATE型でない年(YEAR)月(MONTH)日(DAY)が別々で存在するフィールドがあるんだ。
これを連結してDATE型に変換したいんだ。
SQL文で文字列を連結するにはどうしたらいいの?
▼回答
文字列の結合には2種類があるようだ。
String1、String2には、文字列型のフィールドを指定するかシングルコーテイション''で文字列を
指定する。
①普通の連結:引数を単純に連結する。
CONCAT(String1, String2, ...)
②特殊な連結:第1引数のseparator(セパレータ:区切り文字)で以降の引数を連結する。
CONCAT_WS(separator, String1, String2, ...)
②CONCAT_WSは、oracleは使えないみたい。MySqlだけなの?
オラクルでこうするとできるようだ。
to_date(YEAR || '.' || MONTH || '.'|| DAY || ' 00:00:00', 'yyyy.mm.dd hh24:mi:ss')
■参考サイト
【SMART! ウェブ講座】~文字列関数
http://www.rfs.jp/sb/sql/03/02.html
テーブルでDATE型でない年(YEAR)月(MONTH)日(DAY)が別々で存在するフィールドがあるんだ。
これを連結してDATE型に変換したいんだ。
SQL文で文字列を連結するにはどうしたらいいの?
▼回答
文字列の結合には2種類があるようだ。
String1、String2には、文字列型のフィールドを指定するかシングルコーテイション''で文字列を
指定する。
①普通の連結:引数を単純に連結する。
CONCAT(String1, String2, ...)
②特殊な連結:第1引数のseparator(セパレータ:区切り文字)で以降の引数を連結する。
CONCAT_WS(separator, String1, String2, ...)
②CONCAT_WSは、oracleは使えないみたい。MySqlだけなの?
オラクルでこうするとできるようだ。
to_date(YEAR || '.' || MONTH || '.'|| DAY || ' 00:00:00', 'yyyy.mm.dd hh24:mi:ss')
■参考サイト
【SMART! ウェブ講座】~文字列関数
http://www.rfs.jp/sb/sql/03/02.html
火曜日, 10月 17, 2006
[Java]メモ3
▼質問
ButtonGroupで作成したボタングループを、プログラムから選択させたい時はどうやるんだい?
▼回答
2つのラジオボタンを選択されていない状態で生成してから、ラジオボタン2を選択された状態にする。
ButtonGroup buttonGroup = new ButtonGroup();
JRadioButton radioButton1 = new JRadioButton( "ラジオボタン1", false );
JRadioButton radioButton1 = new JRadioButton( "ラジオボタン2", false );
buttonGroup.add( radioButton1 );
buttonGroup.add( radioButton2 );
buttonGroup.setSelected( radioButton2.getModel(), true );
▼質問
選択されたラジオボタンをすべて解除するにはどうしたらいいの?
▼回答
ButtonGroupを作成し直す?!しかないのかな・・・?
removeしてaddする。。。。
removeしてaddするだけでは駄目のようだ。
setSelectedメソッドでfalseをセットしてやらないと解除できないみたい。
ButtonGroup buttonGroup = new ButtonGroup();
JRadioButton[] radioButton = new JRadioButton[2];
~略~
for ( int i = 0 ; i < radioButton.length ; i++ ) {
if ( radioButton[i].isSelected() ) {
buttonGroup.remove( radioButton[i] );
radioButton[i].setSelected( false );
buttonGroup.add( radioButton[i] );
}
}
▼質問
テキストフィールドの入力文字数をバイト長で制限したいんだけどどうやればいいの?
▼回答
public class LimitedJTextField extends javax.swing.JTextField {
public LimitedJTextField( int limit ) {
this.setDocument( new ByteLengthLimitedDocument( limit ) );
}
static class ByteLengthLimitedDocument extends javax.swing.text.PlainDocument {
private int limit;
public ByteLengthLimitedDocument( int limit ) {
this.limit = limit;
}
public void insertString( int offs, String str, AttributeSet a ) throws BadLocationException {
if ( str == null ) return;
String text = this.getText( 0, getLength() );
byte[] bytes = text.getBytes();
if ( bytes.length >= limit ) return;
super.insertString( offs, str, a );
}
}
}
■参考サイト
http://java-house.jp/ml/archive/j-h-b/020938.html
▼質問
同じような処理でクラスを分けなくて済む方法はないのかな?
クラスのタイプを判断して処理を分けたいんだ。
▼回答
getClassメソッドを使えばできるよ!
cとdはparentを継承して作成されている。
Object parent;
Object c;
Object d;
public void setParent(Object obj) {
parent = obj;
if ( parent.getClass().equals( c ) ) {
c = (c)obj;
}
else if ( parent.getClass().equals( d ) ) {
d = (d)obj;
}
}
■参考サイト
http://www.asahi-net.or.jp/~dp8t-asm/java/tips/HowToGetClass.html
ButtonGroupで作成したボタングループを、プログラムから選択させたい時はどうやるんだい?
▼回答
2つのラジオボタンを選択されていない状態で生成してから、ラジオボタン2を選択された状態にする。
ButtonGroup buttonGroup = new ButtonGroup();
JRadioButton radioButton1 = new JRadioButton( "ラジオボタン1", false );
JRadioButton radioButton1 = new JRadioButton( "ラジオボタン2", false );
buttonGroup.add( radioButton1 );
buttonGroup.add( radioButton2 );
buttonGroup.setSelected( radioButton2.getModel(), true );
▼質問
選択されたラジオボタンをすべて解除するにはどうしたらいいの?
▼回答
ButtonGroupを作成し直す?!しかないのかな・・・?
removeしてaddする。。。。
removeしてaddするだけでは駄目のようだ。
setSelectedメソッドでfalseをセットしてやらないと解除できないみたい。
ButtonGroup buttonGroup = new ButtonGroup();
JRadioButton[] radioButton = new JRadioButton[2];
~略~
for ( int i = 0 ; i < radioButton.length ; i++ ) {
if ( radioButton[i].isSelected() ) {
buttonGroup.remove( radioButton[i] );
radioButton[i].setSelected( false );
buttonGroup.add( radioButton[i] );
}
}
▼質問
テキストフィールドの入力文字数をバイト長で制限したいんだけどどうやればいいの?
▼回答
public class LimitedJTextField extends javax.swing.JTextField {
public LimitedJTextField( int limit ) {
this.setDocument( new ByteLengthLimitedDocument( limit ) );
}
static class ByteLengthLimitedDocument extends javax.swing.text.PlainDocument {
private int limit;
public ByteLengthLimitedDocument( int limit ) {
this.limit = limit;
}
public void insertString( int offs, String str, AttributeSet a ) throws BadLocationException {
if ( str == null ) return;
String text = this.getText( 0, getLength() );
byte[] bytes = text.getBytes();
if ( bytes.length >= limit ) return;
super.insertString( offs, str, a );
}
}
}
■参考サイト
http://java-house.jp/ml/archive/j-h-b/020938.html
▼質問
同じような処理でクラスを分けなくて済む方法はないのかな?
クラスのタイプを判断して処理を分けたいんだ。
▼回答
getClassメソッドを使えばできるよ!
cとdはparentを継承して作成されている。
Object parent;
Object c;
Object d;
public void setParent(Object obj) {
parent = obj;
if ( parent.getClass().equals( c ) ) {
c = (c)obj;
}
else if ( parent.getClass().equals( d ) ) {
d = (d)obj;
}
}
■参考サイト
http://www.asahi-net.or.jp/~dp8t-asm/java/tips/HowToGetClass.html
日曜日, 10月 15, 2006
[Java]フォーマット
▼質問
数値をフォーマットしたい時はどうすんだい?
▼回答
DecimalFormatクラスを使用すればできるよ。使用方法は次のようになるよ。
DecimalFormat decimalFormat = new DecimalFormat( "###.0" );
String str = decimalFormat.format( 1234 );
▼質問
文字列をフォーマットしたい時はどうすんだい?
▼回答
▼質問
テキストフィールドの入力値をフィルタしたい時はどうすればいいの?
▼回答
JFormattedTextFieldクラスを使うとこうなるけど・・・。
文字数でしか入力制限ができない。。。
private MaskFormatter setMaskFormatter( int length ) {
MaskFormatter mf = null;
try {
String format = "";
for ( int i = 0 ; i < length-1 ; i++ ) format = format + "*";
mf = new MaskFormatter( format );
mf.setPlaceholderCharacter('_');
} catch (ParseException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
return mf;
}
MaskFormatter mf = null;
try{
mf = new MaskFormatter("〒###-####");
mf.setPlaceholderCharacter('_');
}catch(ParseException pe){
}
JFormattedTextField ftf3 = new JFormattedTextField(mf);
ftf3.setColumns(10);
private MaskFormatter setMaskFormatter() {
MaskFormatter mf = null;
try {
mf = new MaskFormatter("###-##-####");
mf.setPlaceholderCharacter('_');
} catch (ParseException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
return mf;
}
小数点を含む数値の入力のフォーマットはこうするとできたぞっ!
JFormattedTextField ftf = new JFormattedTextField();
DecimalFormat df = new DecimalFormat( "0.00" );
// 整数部分の最小桁数を設定する.
df.setMinimumIntegerDigits( 1 );
// 整数部分の最大桁数を設定する.
df.setMaximumIntegerDigits( 1 );
// 小数部分の最小桁数を設定する.
df.setMinimumFractionDigits( 2 );
// 小数部分の最大桁数を設定する.
df.setMaximumFractionDigits( 2 );
NumberFormatter nf = new NumberFormatter( df );
// 編集時には必要に応じてリテラル文字がスキップする.
nf.setAllowsInvalid( false );
nf.install( ftf );
■参考サイト
【Java:Swing:JFormattedTextField】
http://www.javadrive.jp/tutorial/jformattedtextfield/index.html
▼質問
入力ベリファイア(InputVerifier)って何?
▼回答
フォーカスが移動した時に実行され、trueになるまでフォーカスが移動できないみたい!?
JFormattedTextField tf = new JFormattedTextField();
tf.setInputVerifier( new InputVerifier() {
public boolean verify( javax.swing.JComponent input ) {
System.out.println( "InputVerifier" );
boolean returnValue = false;
JFormattedTextField tf = (JFormattedTextField)input;
try {
Integer.parseInt( tf.getText() );
returnValue = true;
}
catch ( NumberFormatException e ) {
tf.setText( "" );
returnValue = false;
}
return returnValue;
}
});
▼質問
JFormattedTextFieldでNumberFormatterをinstallしたんだけど・・・。
入力したものをクリアするためにsetText( "" )したんだけどうまくいかないんだ!
どうしたらうまくいくのか教えてくれ!!
▼回答
こうやるとできるよ(^^)v
JFormattedTextField ftf = new JFormattedTextField();
PlainDocument doc = new PlainDocument();
doc.insertString( 0, "", ftfgetDocument().getDefaultRootElement().getAttributes() );
ftf.setDocument( doc );
悲しい・・・お知らせです。
この方法では、設定したフォーマットが削除されてしまうことがわかりました。(;_;)
回避方法は、もう一度フォーマットし直す方法しか見つけれなかった。
とほほ。。。
数値をフォーマットしたい時はどうすんだい?
▼回答
DecimalFormatクラスを使用すればできるよ。使用方法は次のようになるよ。
DecimalFormat decimalFormat = new DecimalFormat( "###.0" );
String str = decimalFormat.format( 1234 );
▼質問
文字列をフォーマットしたい時はどうすんだい?
▼回答
▼質問
テキストフィールドの入力値をフィルタしたい時はどうすればいいの?
▼回答
JFormattedTextFieldクラスを使うとこうなるけど・・・。
文字数でしか入力制限ができない。。。
private MaskFormatter setMaskFormatter( int length ) {
MaskFormatter mf = null;
try {
String format = "";
for ( int i = 0 ; i < length-1 ; i++ ) format = format + "*";
mf = new MaskFormatter( format );
mf.setPlaceholderCharacter('_');
} catch (ParseException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
return mf;
}
MaskFormatter mf = null;
try{
mf = new MaskFormatter("〒###-####");
mf.setPlaceholderCharacter('_');
}catch(ParseException pe){
}
JFormattedTextField ftf3 = new JFormattedTextField(mf);
ftf3.setColumns(10);
private MaskFormatter setMaskFormatter() {
MaskFormatter mf = null;
try {
mf = new MaskFormatter("###-##-####");
mf.setPlaceholderCharacter('_');
} catch (ParseException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
return mf;
}
小数点を含む数値の入力のフォーマットはこうするとできたぞっ!
JFormattedTextField ftf = new JFormattedTextField();
DecimalFormat df = new DecimalFormat( "0.00" );
// 整数部分の最小桁数を設定する.
df.setMinimumIntegerDigits( 1 );
// 整数部分の最大桁数を設定する.
df.setMaximumIntegerDigits( 1 );
// 小数部分の最小桁数を設定する.
df.setMinimumFractionDigits( 2 );
// 小数部分の最大桁数を設定する.
df.setMaximumFractionDigits( 2 );
NumberFormatter nf = new NumberFormatter( df );
// 編集時には必要に応じてリテラル文字がスキップする.
nf.setAllowsInvalid( false );
nf.install( ftf );
■参考サイト
【Java:Swing:JFormattedTextField】
http://www.javadrive.jp/tutorial/jformattedtextfield/index.html
▼質問
入力ベリファイア(InputVerifier)って何?
▼回答
フォーカスが移動した時に実行され、trueになるまでフォーカスが移動できないみたい!?
JFormattedTextField tf = new JFormattedTextField();
tf.setInputVerifier( new InputVerifier() {
public boolean verify( javax.swing.JComponent input ) {
System.out.println( "InputVerifier" );
boolean returnValue = false;
JFormattedTextField tf = (JFormattedTextField)input;
try {
Integer.parseInt( tf.getText() );
returnValue = true;
}
catch ( NumberFormatException e ) {
tf.setText( "" );
returnValue = false;
}
return returnValue;
}
});
▼質問
JFormattedTextFieldでNumberFormatterをinstallしたんだけど・・・。
入力したものをクリアするためにsetText( "" )したんだけどうまくいかないんだ!
どうしたらうまくいくのか教えてくれ!!
▼回答
こうやるとできるよ(^^)v
JFormattedTextField ftf = new JFormattedTextField();
PlainDocument doc = new PlainDocument();
doc.insertString( 0, "", ftfgetDocument().getDefaultRootElement().getAttributes() );
ftf.setDocument( doc );
悲しい・・・お知らせです。
この方法では、設定したフォーマットが削除されてしまうことがわかりました。(;_;)
回避方法は、もう一度フォーマットし直す方法しか見つけれなかった。
とほほ。。。
日曜日, 10月 08, 2006
[Java]文字化け
▼質問
インプットフィールドの全角文字が文字化けする。
入力文字:12345678901234567890
文字化け後:?P?Q?R?S?T?U?V?W?X?O?P?Q?R?S?T?U?V?W?X?O
▼回答
String strText = request.getParameter( "TEXT" );
String strToText = new String ( strText.getBytes( "ISO8859_1" ), "JISAutoDetect" );
■参考サイト
【HTMLエンコード処理】
http://ash.jp/java/htmlencode.htm
【JAVA】
http://hisa-net.ddo.jp/php/java/encode.php
インプットフィールドの全角文字が文字化けする。
入力文字:12345678901234567890
文字化け後:?P?Q?R?S?T?U?V?W?X?O?P?Q?R?S?T?U?V?W?X?O
▼回答
String strText = request.getParameter( "TEXT" );
String strToText = new String ( strText.getBytes( "ISO8859_1" ), "JISAutoDetect" );
■参考サイト
【HTMLエンコード処理】
http://ash.jp/java/htmlencode.htm
【JAVA】
http://hisa-net.ddo.jp/php/java/encode.php
木曜日, 9月 14, 2006
[Java]JSpinnerメモ
▼質問
表示内容(文字列)の横配置(水平位置)はどうすればいいの?
▼回答
下記の方法で出来そう?
JSpinner DateYSpinner = new JSpinner( new SpinnerDateModel( new Date(), null, null, Calendar.YEAR ) );
java.awt.Container cont = (java.awt.Container)( DateYSpinner.getComponent(2) );
java.awt.Component comp = cont.getComponent(0);
javax.swing.JTextField field = (javax.swing.JTextField)comp;
field.setHorizontalAlignment( javax.swing.JTextField.CENTER );
一行で記述すると
((javax.swing.JTextField)( (java.awt.Container)( YearSpinner.getComponent(2) ) ).getComponent(0)).setHorizontalAlignment( javax.swing.JTextField.CENTER );
こんな感じになる。わかりずらいな~(^^;
関数にするとこんな感じかな?パラメータにJSpinnerのオブジェクトと、alignmentに
javax.swing.JTextField.CENTERを指定して呼べばいい感じかな?
private void setHorizontalAlignment( JSpinner spinner, int alignment ) {
java.awt.Container container = (java.awt.Container)( spinner.getComponent(2) );
java.awt.Component component = container.getComponent(0);
javax.swing.JTextField field = (javax.swing.JTextField)component;
field.setHorizontalAlignment( alignment );
}
■参考サイト
http://homepage1.nifty.com/algafield/jpr/srcs/SpinnerDemo.java
【書式付きテキストフィールド】
http://web.sfc.keio.ac.jp/~tetsu/j2se1.5/ja/guide/swing/1.4/ftf.html
▼質問
JSpinnerの「▲」「▼」ボタンのイベントを取得するにはどうしたらいいんだ?
▼回答
こんなコードを書いてまずは解析してみたらいいよ!
JSpinner spinner = new JSpinner();
java.awt.Component c0, c1, c2;
c0 = spinner.getComponent(0); // button
c1 = spinner.getComponent(1); // button
c2 = spinner.getComponent(2); // panel containing textfield
System.out.println(c0.toString());
System.out.println(c1.toString());
System.out.println(c2.toString());
出力結果
javax.swing.plaf.basic.BasicArrowButton[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.5,border=javax.swing.border.CompoundBorder@d1329,flags=4194600,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=,defaultCapable=true]
javax.swing.plaf.basic.BasicArrowButton[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.5,border=javax.swing.border.CompoundBorder@650892,flags=4194600,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=,defaultCapable=true]
javax.swing.JSpinner$ListEditor[,0,0,0x0,invalid,layout=javax.swing.JSpinner$ListEditor,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=]
JavaのAPIを解析するのは面白いね!Javaの奥深さがわかってきた感じがしてきて楽しくなってきた。(^^)
わかるってすばらしい!!
マウスクリックイベントの登録をすると下記のようになる。
c0.addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseClicked( java.awt.event.MouseEvent evt ) {
}
});
c1.addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseClicked( java.awt.event.MouseEvent evt ) {
}
});
■参考サイト
http://www.javaworld.com/javaforums/showflat.php?Cat=&Board=javabeginner&Number=3300&page=31&view=collapsed&sb=7&o=
▼質問
NumberEditorで作成したスピナーを入力不可にしたんだけど・・・。
どうすればいいの?
▼回答
こうすればいいみたい!
((JSpinner.NumberEditor)spinner.getEditor()).getTextField().setEditable( false );
■参考サイト
【Java Swing JSpinner - てんぷらメモ】
http://terai.xrea.jp/Swing/SpinnerEditor.html
▼質問
NumberEditorで値を設定したい時はどうするんだい!
▼回答
こうすれば表示は変わったけど、spinner.getValue()の値が反映されないみたい!!
JSpinner.NumberEditor numberEditor = (JSpinner.NumberEditor)spinner.getEditor();
numberEditor.getTextField().setText( value );
次のようにするとgetValue()の値がちゃんと反映されるよ!
みそは、commitEdit()だよ~ん!!
try {
JSpinner.NumberEditor numberEditor = (JSpinner.NumberEditor)spinner.getEditor();
numberEditor.getTextField().setText( value );
numberEditor.commitEdit();
}
catch ( ParseException e ) {
e.printStackTrace();
}
▼質問
setValueでこんなエラーが出るんだ?!
java.lang.IllegalArgumentException: invalid sequence element
at javax.swing.SpinnerListModel.setValue(Unknown Source)
at javax.swing.JSpinner.setValue(Unknown Source)
▼回答
SpinnerListModelで設定している最大値・最小値の範囲が超えている可能性があるから!
チェックしてみるといいよ!!
▼質問
SpinnerNumberModelの最大値を再設定したいんだけど!うまくいかないんだ!?
この方法では駄目なのかな?
String Maximum = String.valueOf(10);
((SpinnerNumberModel)Spinner.getModel()).setMaximum(Maximum);
String Maximum = String.valueOf(10);
JSpinner.NumberEditor numberEditor = (JSpinner.NumberEditor)Spinner.getEditor();
((SpinnerNumberModel)numberEditor.getModel()).setMaximum(Maximum);
▼回答
もう一度、SpinnerNumberModelオブジェクトを生成してJSpinnerのsetModelメソッドに
設定すればうまくできるよ。
SpinnerNumberModel model = new SpinnerNumberModel( InitNum, Minimum, Maximum, Step );
Spinner.setModel( model );
表示内容(文字列)の横配置(水平位置)はどうすればいいの?
▼回答
下記の方法で出来そう?
JSpinner DateYSpinner = new JSpinner( new SpinnerDateModel( new Date(), null, null, Calendar.YEAR ) );
java.awt.Container cont = (java.awt.Container)( DateYSpinner.getComponent(2) );
java.awt.Component comp = cont.getComponent(0);
javax.swing.JTextField field = (javax.swing.JTextField)comp;
field.setHorizontalAlignment( javax.swing.JTextField.CENTER );
一行で記述すると
((javax.swing.JTextField)( (java.awt.Container)( YearSpinner.getComponent(2) ) ).getComponent(0)).setHorizontalAlignment( javax.swing.JTextField.CENTER );
こんな感じになる。わかりずらいな~(^^;
関数にするとこんな感じかな?パラメータにJSpinnerのオブジェクトと、alignmentに
javax.swing.JTextField.CENTERを指定して呼べばいい感じかな?
private void setHorizontalAlignment( JSpinner spinner, int alignment ) {
java.awt.Container container = (java.awt.Container)( spinner.getComponent(2) );
java.awt.Component component = container.getComponent(0);
javax.swing.JTextField field = (javax.swing.JTextField)component;
field.setHorizontalAlignment( alignment );
}
■参考サイト
http://homepage1.nifty.com/algafield/jpr/srcs/SpinnerDemo.java
【書式付きテキストフィールド】
http://web.sfc.keio.ac.jp/~tetsu/j2se1.5/ja/guide/swing/1.4/ftf.html
▼質問
JSpinnerの「▲」「▼」ボタンのイベントを取得するにはどうしたらいいんだ?
▼回答
こんなコードを書いてまずは解析してみたらいいよ!
JSpinner spinner = new JSpinner();
java.awt.Component c0, c1, c2;
c0 = spinner.getComponent(0); // button
c1 = spinner.getComponent(1); // button
c2 = spinner.getComponent(2); // panel containing textfield
System.out.println(c0.toString());
System.out.println(c1.toString());
System.out.println(c2.toString());
出力結果
javax.swing.plaf.basic.BasicArrowButton[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.5,border=javax.swing.border.CompoundBorder@d1329,flags=4194600,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=,defaultCapable=true]
javax.swing.plaf.basic.BasicArrowButton[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.5,border=javax.swing.border.CompoundBorder@650892,flags=4194600,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=,defaultCapable=true]
javax.swing.JSpinner$ListEditor[,0,0,0x0,invalid,layout=javax.swing.JSpinner$ListEditor,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=]
JavaのAPIを解析するのは面白いね!Javaの奥深さがわかってきた感じがしてきて楽しくなってきた。(^^)
わかるってすばらしい!!
マウスクリックイベントの登録をすると下記のようになる。
c0.addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseClicked( java.awt.event.MouseEvent evt ) {
}
});
c1.addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseClicked( java.awt.event.MouseEvent evt ) {
}
});
■参考サイト
http://www.javaworld.com/javaforums/showflat.php?Cat=&Board=javabeginner&Number=3300&page=31&view=collapsed&sb=7&o=
▼質問
NumberEditorで作成したスピナーを入力不可にしたんだけど・・・。
どうすればいいの?
▼回答
こうすればいいみたい!
((JSpinner.NumberEditor)spinner.getEditor()).getTextField().setEditable( false );
■参考サイト
【Java Swing JSpinner - てんぷらメモ】
http://terai.xrea.jp/Swing/SpinnerEditor.html
▼質問
NumberEditorで値を設定したい時はどうするんだい!
▼回答
こうすれば表示は変わったけど、spinner.getValue()の値が反映されないみたい!!
JSpinner.NumberEditor numberEditor = (JSpinner.NumberEditor)spinner.getEditor();
numberEditor.getTextField().setText( value );
次のようにするとgetValue()の値がちゃんと反映されるよ!
みそは、commitEdit()だよ~ん!!
try {
JSpinner.NumberEditor numberEditor = (JSpinner.NumberEditor)spinner.getEditor();
numberEditor.getTextField().setText( value );
numberEditor.commitEdit();
}
catch ( ParseException e ) {
e.printStackTrace();
}
▼質問
setValueでこんなエラーが出るんだ?!
java.lang.IllegalArgumentException: invalid sequence element
at javax.swing.SpinnerListModel.setValue(Unknown Source)
at javax.swing.JSpinner.setValue(Unknown Source)
▼回答
SpinnerListModelで設定している最大値・最小値の範囲が超えている可能性があるから!
チェックしてみるといいよ!!
▼質問
SpinnerNumberModelの最大値を再設定したいんだけど!うまくいかないんだ!?
この方法では駄目なのかな?
String Maximum = String.valueOf(10);
((SpinnerNumberModel)Spinner.getModel()).setMaximum(Maximum);
String Maximum = String.valueOf(10);
JSpinner.NumberEditor numberEditor = (JSpinner.NumberEditor)Spinner.getEditor();
((SpinnerNumberModel)numberEditor.getModel()).setMaximum(Maximum);
▼回答
もう一度、SpinnerNumberModelオブジェクトを生成してJSpinnerのsetModelメソッドに
設定すればうまくできるよ。
SpinnerNumberModel model = new SpinnerNumberModel( InitNum, Minimum, Maximum, Step );
Spinner.setModel( model );
木曜日, 8月 24, 2006
[Java]Swing関連
▼質問
JScrollPaneのスクロールバー上下・左右にあるボタンのワンクリックの移動量を設定するには
どうしたらいいの?
▼回答
JScrollBarクラスのsetUnitIncrement()メソッドで1クリックの移動量(増加量)を設定できる。
下記のサンプルは、水平スクロールを常に表示し移動量を設定するプログラムである。
JScrollPane scrollPane = new JScrollPan
(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER,
javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
JScrollBar scrollBar = new JScrollBar();
// scrollBar = scrollPane.getVerticalScrollBar()
// scrollBar.setUnitIncrement(n);
scrollBar = scrollPane.getHorizontalScrollBar();
scrollBar.setUnitIncrement(n);
▼質問
JScrollPaneを右にスクロールすると、レイアウトで区切った左側部分が隠れる。
▼回答
作成したJScrollPaneの部分をPanelに追加してやるとうまくいったが、左側が今度は隠れてしまった。
setOpaqueメソッドで制御すればできそうだが。。。
調べてみると、JScrollPaneとPanelの混在は駄目みたい。とほほ・・・。
JScrollPaneのときは、JPanelを継承したもの使い。Panelのときは、ScrollPaneの組み合わせしか
駄目みたい。。。。
とりあえずPanelをJPanelに修正したが、スクロールがうまく動かなく、表示領域以外のところが
見れなかった。
調べてみると、次のコードを入れてみるとよいことがわかったので試しに入れてみた。
Dimension size = new Dimension( x, y );
this.setMaximumSize( size );
this.setMinimumSize( size );
this.setPreferredSize( size );
すると、うまく動いてくれた。よかった。(*^^*)v
▼質問
JButtonで複数行の文字列を表示するにはどうすればいいの?
▼回答
テキストに¥nを入れても駄目なのね?(>_<)
テキストにHTML(Hyper Text Markup Language)形式で記述をするとできるのね!
▼質問
ダイアログのFramとJDialogの関係?JFramとDialogの関係ってあるの?
▼回答
public class TestDialog extends Fram {
private MainDialog dialog = null;
// コンストラクタ
public TestDialog() {
Dimension dim = new Dimension( 100, 100 );
dialog = new DataDialog( MizuASetDataDialog.this, title, true );
Dimension ScreenSize = getToolkit().getScreenSize();
dialog.setBounds( (ScreenSize.width/2) - (dim.width/2), (ScreenSize.height/2) - (dim.height/2), dim.width, dim.height );
dialog.setResizable( false );
dialog.setSize( dim );
// ダイアログのクローズ処理
dialog.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent e ) {
dialog.dispose();
dialog = null;
return;
}
});
dialog.show();
}
private class MainDialog extends Dialog {
// コンストラクタ
public MainDialog( Fram owner, String title, boolean modal ) {
super( owner, title, modal );
}
}
}
▼質問
Javaにはスピンボックスはないの?
▼回答
あるよ!J2SE1.4からSwingコンポーネントのJSpinner(スピナー)が追加されたよ!!
■参考サイト
http://www.javainthebox.net/laboratory/JDK1.4/Swing/Spinner/Spinner.html
▼質問
ラジオボタンはどうやってコーディングするの?
▼回答
JRadioButtonとButtonGroupを使って作成するんだ。
JRadioButton radio1 = new JRadioButton("radio1", true);
JRadioButton radio2 = new JRadioButton("radio2");
JRadioButton radio3 = new JRadioButton("radio3");
ButtonGroup group = new ButtonGroup();
group.add(radio1);
group.add(radio2);
group.add(radio3);
JScrollPaneのスクロールバー上下・左右にあるボタンのワンクリックの移動量を設定するには
どうしたらいいの?
▼回答
JScrollBarクラスのsetUnitIncrement()メソッドで1クリックの移動量(増加量)を設定できる。
下記のサンプルは、水平スクロールを常に表示し移動量を設定するプログラムである。
JScrollPane scrollPane = new JScrollPan
(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER,
javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
JScrollBar scrollBar = new JScrollBar();
// scrollBar = scrollPane.getVerticalScrollBar()
// scrollBar.setUnitIncrement(n);
scrollBar = scrollPane.getHorizontalScrollBar();
scrollBar.setUnitIncrement(n);
▼質問
JScrollPaneを右にスクロールすると、レイアウトで区切った左側部分が隠れる。
▼回答
作成したJScrollPaneの部分をPanelに追加してやるとうまくいったが、左側が今度は隠れてしまった。
setOpaqueメソッドで制御すればできそうだが。。。
調べてみると、JScrollPaneとPanelの混在は駄目みたい。とほほ・・・。
JScrollPaneのときは、JPanelを継承したもの使い。Panelのときは、ScrollPaneの組み合わせしか
駄目みたい。。。。
とりあえずPanelをJPanelに修正したが、スクロールがうまく動かなく、表示領域以外のところが
見れなかった。
調べてみると、次のコードを入れてみるとよいことがわかったので試しに入れてみた。
Dimension size = new Dimension( x, y );
this.setMaximumSize( size );
this.setMinimumSize( size );
this.setPreferredSize( size );
すると、うまく動いてくれた。よかった。(*^^*)v
▼質問
JButtonで複数行の文字列を表示するにはどうすればいいの?
▼回答
テキストに¥nを入れても駄目なのね?(>_<)
テキストにHTML(Hyper Text Markup Language)形式で記述をするとできるのね!
javax.swing.JButton jbutton = new javax.swing.JButton(""<""HTML"">""1行目
""HTML"">");
2行目
▼質問
ダイアログのFramとJDialogの関係?JFramとDialogの関係ってあるの?
▼回答
public class TestDialog extends Fram {
private MainDialog dialog = null;
// コンストラクタ
public TestDialog() {
Dimension dim = new Dimension( 100, 100 );
dialog = new DataDialog( MizuASetDataDialog.this, title, true );
Dimension ScreenSize = getToolkit().getScreenSize();
dialog.setBounds( (ScreenSize.width/2) - (dim.width/2), (ScreenSize.height/2) - (dim.height/2), dim.width, dim.height );
dialog.setResizable( false );
dialog.setSize( dim );
// ダイアログのクローズ処理
dialog.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent e ) {
dialog.dispose();
dialog = null;
return;
}
});
dialog.show();
}
private class MainDialog extends Dialog {
// コンストラクタ
public MainDialog( Fram owner, String title, boolean modal ) {
super( owner, title, modal );
}
}
}
▼質問
Javaにはスピンボックスはないの?
▼回答
あるよ!J2SE1.4からSwingコンポーネントのJSpinner(スピナー)が追加されたよ!!
■参考サイト
http://www.javainthebox.net/laboratory/JDK1.4/Swing/Spinner/Spinner.html
▼質問
ラジオボタンはどうやってコーディングするの?
▼回答
JRadioButtonとButtonGroupを使って作成するんだ。
JRadioButton radio1 = new JRadioButton("radio1", true);
JRadioButton radio2 = new JRadioButton("radio2");
JRadioButton radio3 = new JRadioButton("radio3");
ButtonGroup group = new ButtonGroup();
group.add(radio1);
group.add(radio2);
group.add(radio3);
登録:
投稿 (Atom)