- 締切済み
java swing での質問です。
javaのプログラミングをeclipseでしているのですが swingで行き詰ってしまいました。 タブペインを使いタブパネルを作り、その中にボタンを配置したのですが、 ボタンの位置をsetBoundsで動かすことができませんでした。 他の命令を使わなければならないのでしょうか? プログラミング自体が初心者のため、説明に不備があると思いますが 助けていただけると幸いです。 ひどいプログラミングかと思いますが張らせていただきました package gui; import java.awt.*; import javax.swing.*; public class ReisyokuMenu extends JFrame{ /*serialVersionUID*/ private static final long serialVersionUID=1L; /*コンポーネント作成*/ JButton syokuzaiBtn = new JButton("食材一覧"); JButton syoumiBtn = new JButton("賞味期限順"); JButton bunruiBtn = new JButton("分類"); JButton returnBtn=new JButton("Topへ"); JPanel tabPanel1 = new JPanel(); JPanel tabPanel2 = new JPanel(); JTabbedPane tabbedpane = new JTabbedPane(); public ReisyokuMenu(){ /*Closeボタンでアプリケーションが終了しないように設定*/ setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); /*フレームサイズを変更できないように設定*/ setResizable(false); /*フレームコンテナのインスタンスを生成*/ Container cPane = getContentPane(); /*レイアウトマネジャを利用しない(座標を指定する)*/ cPane.setLayout(null); setLocationRelativeTo(null); setSize(400, 380);//setBoundsはy、x、幅、高さを指定するのでsetLocationRelativeToで位置指定をする為に使用。 setTitle("一人暮らし支援ツール");//アプリケーションタイトルを入れる tabbedpane.addTab("食材を見る", tabPanel1); tabbedpane.addTab("食材を探す", tabPanel2); tabPanel1.add(syokuzaiBtn); tabPanel1.add(syoumiBtn); tabPanel1.add(bunruiBtn); syokuzaiBtn.setLocation(50, 80);//「選択」ボタン syoumiBtn.setBounds(10,10,325,120); bunruiBtn.setBounds(10,270,90,40); tabPanel2.add(new JLabel("食材名:")); tabPanel2.add(new JTextField("", 10)); setContentPane(tabbedpane); } public void setVisible(boolean isVisible){ if(isVisible){ /*フレームの表示位置を指定(x,y)*/ setLocation(200,200); } /*フレームを表示*/ super.setVisible(isVisible); } }
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- zozy
- ベストアンサー率60% (20/33)
そもそもにエディタでGUI設計するのは一から自分で作れることが前提だと思います。 いい例えではないですが、小学校の算数の授業で児童に電卓使わせて、よくできました!はおかしいですよね? 自分もよくGUIが分からないうちにエディタを使ってしまい、間違いに気付いて勉強しなおすはめになりましたので。 これで半年近くの期間を無駄にしました。 思い通りに配置されないのはレイアウトが設定されてないからです。 自由配置にする場合はグループレイアウトにするしかないですが、記述が列挙型のためソースが複雑になります。 可読性を考えるのなら他のレイアウトを使うべきかもしれません。 とりあえず、質問のソースから配置条件のはっきりしているものだけ配置したものを作ってみました。 ちなみにグループレイアウトです。 import java.awt.BorderLayout; import javax.swing.GroupLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTabbedPane; public class ReishokuMenu extends JFrame{ JTabbedPane tabbedPane=new JTabbedPane(); JPanel tabPanel1=new JPanel(); JButton syomiButton=new JButton("賞味期限順"); JButton bunruiButton=new JButton("分類"); JPanel tabPanel2=new JPanel(); public ReishokuMenu(){ //これがないと×ボタンを押しても終了しない //質問のソースにはなかったので今後注意しましょう setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); GroupLayout layout1=new GroupLayout(tabPanel1); tabPanel1.setLayout(layout1); //setHorizontalGroup()は水平方向の配置設定 layout1.setHorizontalGroup( //コンポーネント同士で位置合わせを行うグループ layout1.createParallelGroup() //ひとつづつ配置,サイズ設定を行うグループを追加 .addGroup(layout1.createSequentialGroup() //配置ギャップを10に設定 .addContainerGap(10,10) .addGroup(layout1.createParallelGroup() //最小サイズ,推奨サイズ,最大サイズを指定して配置 //GroupLayout.PREFERRED_SIZEはグループレイアウトの推奨サイズ .addComponent(bunruiButton,GroupLayout.PREFERRED_SIZE,90,GroupLayout.PREFERRED_SIZE) .addComponent(syomiButton,GroupLayout.PREFERRED_SIZE,325,GroupLayout.PREFERRED_SIZE))) ); layout1.setVerticalGroup( layout1.createParallelGroup() .addGroup(layout1.createSequentialGroup() .addContainerGap() .addComponent(syomiButton,GroupLayout.PREFERRED_SIZE,120,GroupLayout.PREFERRED_SIZE) .addGap(150,150,150) .addComponent(bunruiButton,GroupLayout.PREFERRED_SIZE,40,GroupLayout.PREFERRED_SIZE) .addContainerGap(0,Short.MAX_VALUE)) ); tabbedPane.addTab("食材を見る", tabPanel1); GroupLayout layout2=new GroupLayout(tabPanel2); tabPanel2.setLayout(layout2); layout2.setHorizontalGroup( layout2.createParallelGroup() .addGap(0,395,Short.MAX_VALUE) ); layout2.setVerticalGroup( layout2.createParallelGroup() .addGap(0,353,Short.MAX_VALUE) ); tabbedPane.addTab("食材を探す", tabPanel2); getContentPane().add(tabbedPane,BorderLayout.CENTER); //配置されたコンポーネントを見てウィンドウのサイズを設定してくれる pack(); } //実行メソッド public static void main(String args[]){ //setVisibleは可視状態にするかのフラグ new ReishokuMenu().setVisible(true); } }
お礼
回答していただきありがとうございます。 教師から言われ作っていたのですが、GUIの学習をすることが先決ですね。 痛感させられる意見でした。 貴重な意見をありがとうございました。 ソースを提示していただき情けないながらも本当に感謝しています。