GridLayoutレイアウトで ボタンを追加し
後で プログラムで レイアウトの( 2, 1 )に
別のボタンを配置したり
( 2, 2 )の位置に 何のコンポーネントのオブジェクトがあるか?
と知ることが出来る 方法はありますか?
教えてください。
JPanel p = new JPanel();
p.setLayout( new GridLayout( 2, 2 ) );
JButton b1 = new JButton( "Button1" );
JButton b2 = new JButton( "Button2" );
JButton b3 = new JButton( "Button3" );
JButton b4 = new JButton( "Button3" );
p.add( b1 );
p.add( b2 );
p.add( b3 );
p.add( b4 );
No.2ベストアンサー
- 回答日時:
サンプルコードを示します。
>( 2, 2 )の位置に 何のコンポーネントのオブジェクトがあるか?
GridLayoutedPanel#getComponent( int row, int col )
>後で プログラムで レイアウトの( 2, 1 )に 別のボタンを配置
GridLayoutedPanel#setComponent( Component c, int row, int col )
で、実装してあります。
なお、インデックスは0から始まりますので、
GridLayoutedPanel#setLayout( new GridLayout( 2, 2 ) ) の場合、
指定可能なインデックス値は(0,0)~(1,1)であることにご注意ください。
----------- GridLayoutedPanel.java -----------
import java.awt.Component;
import java.awt.GridLayout;
import javax.swing.JPanel;
/**
* グリッドレイアウト専用のJPanelのサブクラスです。
*/
public class GridLayoutedPanel extends JPanel {
/**
* ダブルバッファーおよびフローレイアウトで新しい JPanel を作成します。
* 後程、setLayoutメソッドで、GridLayoutマネジャーを設定してください。
*/
public GridLayoutedPanel() {
}
/**
* ダブルバッファーおよびグリッドレイアウトで新しい JPanel を作成します。
* @param rows 行数
* @param cols 列数
*/
public GridLayoutedPanel( int rows, int cols ) {
setLayout( new GridLayout(rows, cols) );
}
/**
* ダブルバッファーおよびグリッドレイアウトで新しい JPanel を作成します。
* @param rows 行数
* @param cols 列数
* @param hgap 水平方向の間隔
* @param vgap 垂直方向の間隔
*/
public GridLayoutedPanel( int rows, int cols, int hgap, int vgap ) {
setLayout( new GridLayout(rows, cols, hgap, vgap) );
}
/**
* 指定の行、列の位置にあるコンポーネントを返します。
* インデックスは0から始まります。
* @param row 行位置
* @param col 列位置
* @return 指定位置のコンポーネント
*/
public Component getComponent( int row, int col ) {
return getComponent( convertIndex(row, col) );
}
/**
* 指定位置のコンポーネントを差し替えます。
* インデックスは0から始まります。
* @param c 差し替えるコンポーネント
* @param row 行位置
* @param col 列位置
* @return 差し替えられる前にあったコンポーネント
*/
public Component setComponent( Component c, int row, int col ) {
int index = convertIndex(row, col);
Component old = getComponent( index );
remove( index );
add( c, index );
return old;
}
/**
* グリッドレイアウトのインデックスを1次元インデックスに変換します。
* @param row 行位置
* @param col 列位置
* @return 1次元インデックス
*/
private int convertIndex( int row, int col ) {
GridLayout gl = (GridLayout)getLayout();
return row * gl.getColumns() + col;
}
}
----------- GridLayoutedPanelSample.java -----------
import javax.swing.JButton;
import javax.swing.JFrame;
/**
* GridLayoutedPanelのサンプルクラス
*/
public class GridLayoutedPanelSample {
public GridLayoutedPanelSample() {
GridLayoutedPanel p = new GridLayoutedPanel( 2, 2 );
JButton b1 = new JButton( "Button1" );
JButton b2 = new JButton( "Button2" );
JButton b3 = new JButton( "Button3" );
JButton b4 = new JButton( "Button3" );
p.add( b1 );
p.add( b2 );
p.add( b3 );
p.add( b4 );
JFrame frame = new JFrame();
frame.add( p );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setBounds( 100, 100, 300, 200 );
frame.setVisible( true );
//指定位置のコンポーネントを差し替える
p.setComponent( new JButton("Button5"), 1, 0);
//指定位置のコンポーネントを調べる
System.out.println( ((JButton)p.getComponent(1, 1)).getText() );
}
public static void main(String[] args) {
new GridLayoutedPanelSample();
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP jpgraphで表示されない 2 2022/10/22 09:12
- Windows 10 IT初心者です! powershellで以下のようなエラーが出ました オブジェクト参照がオブジェクト 1 2023/05/17 11:30
- 英語 "exstential"と"exsting"と"existent"の違い等について 1 2023/05/01 13:50
- TOEFL・TOEIC・英語検定 訳し方をおしえてください 1 2022/05/12 08:42
- 英語 難解な英文 2 2023/07/28 22:24
- 英語 英文の訳が?? 2 2023/02/03 11:28
- VPN 何これ 1 2022/04/19 01:32
- 英語 この英語は正しいでしょうか? 3 2023/07/06 22:21
- 英語 英文解釈 4 2023/07/26 13:54
- その他(ソフトウェア) Microsoft Store Guitar Pro購入後の質問 1 2022/08/11 17:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「配列定数は、イニシャライザ...
-
intが負の時に投げる例外はあり...
-
Javaで電卓を作りたい
-
JUnit4のアノテーションについて
-
初心者ですが、今javaで簡単な...
-
javaで電卓を作りたいのですが...
-
JAVA エラー 式の開始が不正で...
-
DataSet(DataTable)の使い方
-
C++からC#のdllを参照する際、...
-
javaのエラーの意味がわかりま...
-
前日日付の取得
-
(Swing)JTextFieldを半角のみ入...
-
消費税を計算
-
各店舗全て、リンゴは1個150円...
-
すいません、質問というか困っ...
-
java spring でエラーが出て困...
-
java 格納した乱数それぞれにボ...
-
Java 初心者 int型の取り扱い方
-
C#で実行時にメソッドの返り値...
-
java 長さの異なる配列の代入
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
式の型は配列型で int に解決済...
-
「配列定数は、イニシャライザ...
-
javaでcsvファイル読込時の改行...
-
java spring でエラーが出て困...
-
javaでカレンダー作成
-
Javaで電卓を作りたい
-
SwingでJtableのヘッダ行が表示...
-
JAVA エラー 式の開始が不正で...
-
JAVAでCの関数ポインタのような...
-
C#で実行時にメソッドの返り値...
-
(Swing)JTextFieldを半角のみ入...
-
c# デリゲート関連の命名について
-
Javaでポインタ的なことはでき...
-
複数のボタンを配置し、それぞ...
-
JUnit4のアノテーションについて
-
javaのエラーの意味がわかりま...
-
intが負の時に投げる例外はあり...
-
sin曲線とcos曲線を描くプログ...
-
C++からC#のdllを参照する際、...
-
Java 初心者 int型の取り扱い方
おすすめ情報