UIのコンとーロールが勝手に再配置されてしまいます。
今Javaを勉強し始めたのですが、UIを使った処理で実行中のフォームをマウスを使ってサイズを変えたり、ラベルのテキストに新しい文字列をセットしたりすると最後にフォームに追加したコントロールの配置がおかしくなってしまいます。
ソースはクラス毎に違うソースファイルに記述しています。(一部削除)
何が原因でコントロールが再配置されてしまうのでしょうか?
また、作成者が意図していないにも関わらずUIが勝手に再配置される事等おこるのでしょうか。
回答お願いします。
public class MainMenu {
public static void main(String args[]){
FrmMainMenu frmMainMenu = new FrmMainMenu();
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class FrmMainMenu implements ActionListener{
public JFrame frmMainMenu;
public JTextField txtInput[];
public JButton btnSet[];
public JButton btnShow;
public Choice cmbSelect[];
public JLabel lblCharacter[];
public JLabel lblNation[];
/**
* コンストラクタ
*/
FrmMainMenu(){
frmMainMenu = new JFrame("入力");
frmMainMenu.setBounds(200, 200, 400, 400);
frmMainMenu.setVisible(true);
frmMainMenu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setControls();
}
/**
* コントロールの設定
*/
public void setControls(){
//テキストフィールド設定
txtInput = new JTextField[2];
txtInput[0] = new JTextField();
txtInput[1] = new JTextField();
frmMainMenu.add(txtInput[0]);
frmMainMenu.add(txtInput[1]);
txtInput[0].setBounds(150, 50, 100, 20);
txtInput[0].setVisible(true);
txtInput[1].setBounds(150, 100, 100, 20);
txtInput[1].setVisible(true);
//コンボボックス設定
cmbSelect = new Choice[2];
cmbSelect[0] = new Choice();
cmbSelect[1] = new Choice();
frmMainMenu.add(cmbSelect[0]);
frmMainMenu.add(cmbSelect[1]);
cmbSelect[0].setBounds(30, 50, 100, 20);
cmbSelect[0].setVisible(true);
cmbSelect[1].setBounds(30, 100, 100, 20);
cmbSelect[1].setVisible(true);
cmbSelect[0].add("SUZUKI");
cmbSelect[0].add("MATSUDA");
cmbSelect[0].add("HONDA");
cmbSelect[0].add("NISSAN");
cmbSelect[1].add("JAPAN");
cmbSelect[1].add("AMERICA");
cmbSelect[1].add("China");
cmbSelect[1].add("Korea");
cmbSelect[1].add("France");
cmbSelect[1].add("NorthKorea");
//ラベル設定
lblCharacter = new JLabel[4];
for(int i = 0; i < 4; i++){
lblCharacter[i] = new JLabel();
frmMainMenu.add(lblCharacter[i]);
lblCharacter[i].setBounds(30, 200 + (i * 30), 100, 20);
lblCharacter[i].setVisible(true);
}
lblNation = new JLabel[6];
for(int i = 0; i < 6; i++){
lblNation[i] = new JLabel();
frmMainMenu.add(lblNation[i]);
lblNation[i].setBounds(150, 200 + (i * 30), 100, 20);
lblNation[i].setVisible(true);
}
//ボタン設定
btnSet = new JButton[2];
btnSet[0] = new JButton("設定");
btnSet[1] = new JButton("設定");
btnShow = new JButton("表示");
frmMainMenu.add(btnSet[0]);
frmMainMenu.add(btnSet[1]);
frmMainMenu.add(btnShow);
btnSet[0].setBounds(270, 50, 70, 20);
btnSet[0].setVisible(true);
btnSet[0].addActionListener(this);
btnSet[1].setBounds(270, 100, 70, 20);
btnSet[1].setVisible(true);
btnSet[1].addActionListener(this);
btnShow.setBounds(270, 150, 70, 20);
btnShow.setVisible(true);
btnShow.addActionListener(this);
}
private void showInformation(){
lblCharacter[0].setText("aaa");
lblCharacter[1].setText("bbb");
lblCharacter[2].setText("ccc");
lblCharacter[3].setText("ddd");
lblNation[0].setText("aaaa");
lblNation[1].setText("bbbb");
lblNation[2].setText("cccc");
lblNation[3].setText("dddd");
lblNation[4].setText("eeee");
lblNation[5].setText("ffff");
}
public void actionPerformed(ActionEvent event){
if(event.getSource() == btnShow){
//情報を表示
showInformation();
}
}
}
お礼
長い間、お礼もせずすみませんでした。 仕様が変わって、結局ボタントップを二段にしなくなりました。 でもできるか試したいので、時間ができたらやってみたいと思っています。 どうもありがとうございました。