質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

1回答

6206閲覧

文字やボタンの配置を変更したい

maikel

総合スコア61

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

1クリップ

投稿2018/08/14 09:02

編集2018/08/14 11:09

文字やボタンの配置を変更したいです。

現在の状態

現在、BorderLayoutによって、ボタンをセンターに位置を指定していますが、
ボタンが右に来てますよね。
配置の変更が読み込めていません。

解決法を教えてほしいです。

こちらが問題のコードです。

java

1package app; 2 3import javax.swing.*; 4import java.awt.*; 5import java.awt.event.*; 6 7public class SecondPanel extends JFrame implements ActionListener { 8 JPanel panel; 9 CardLayout layer; 10 11 public static void main(String args[]) { 12 SecondPanel frame = new SecondPanel(); 13 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 14 frame.setBounds(100, 20, 1000, 700); 15 frame.setTitle("直観力トレーニング"); 16 frame.setVisible(true); 17 } 18 19 SecondPanel() { 20 // scene1 21 JPanel scene1 = new JPanel(); 22 JPanel titlesPanel = new JPanel(); 23 JLabel title = new JLabel("直観力テスト"); 24 title.setFont(new Font(Font.SERIF, Font.BOLD, 50)); 25 titlesPanel.setPreferredSize(new Dimension(500, 100)); 26 27 titlesPanel.add(title,BorderLayout.PAGE_START); 28 scene1.add(titlesPanel); 29 30 JButton jb = new JButton("直観力テストスタート"); 31 jb.setPreferredSize(new Dimension(200, 50)); 32 JPanel buttonsPanel = new JPanel(); 33 buttonsPanel.add(jb); 34 35 scene1.add(buttonsPanel,BorderLayout.PAGE_END); 36 37 // scene2 38 JPanel scene2 = new JPanel(); 39 scene2.setBackground(Color.BLUE); 40 41 // matomeru 42 this.panel = new JPanel(); 43 this.layer = new CardLayout(); 44 this.panel.setLayout(this.layer); 45 46 this.panel.add(scene1, "menue"); 47 this.panel.add(scene2, "view"); 48 49 // ボタン用のパネル 50 jb.addActionListener(this); 51 jb.setActionCommand("view"); 52 53 // カードレイアウトに追加 54 getContentPane().add(this.panel); 55 56 57 58 59 } 60 61 public void actionPerformed(ActionEvent e) { 62 String cmd = e.getActionCommand(); 63 layer.show(this.panel, cmd); 64 } 65 66}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/08/14 09:40 編集

「今現在どうなっていて」「どのように」変更したいのでしょうか。要件を具体的に記載してください。
maikel

2018/08/14 11:00

回答ありがとうございます。私の説明が悪かったです。編集するので、回答欲しいです。
退会済みユーザー

退会済みユーザー

2018/08/14 11:21

?そのソースではエクリプスのボタン配置は変更できません。(プラグインですらないから)
guest

回答1

0

<< 原因 >>
scene1JPanelのコンストラクタでBorderLayoutを指定していない かつ setLayoutを呼び出していないからです。

Java

1JPanel scene1 = new JPanel(new BorderLayout()); // コンストラクタ指定 (※お勧め) 2scene1.setLayout(new BorderLayout()); // またはsetLayout指定

どちらかをコードに追加してくださいな。

<< 理由 >>
scene1のレイアウトが指定されていないため、レイアウトはFlowLayoutになります。

JPanelのコンストラクタ 引用部分の太文字は引用者強調
ダブル・バッファおよびフロー・レイアウトで新しいJPanelを作成します。

FlowLayoutクラス

FlowLayoutクラスは左から順番に右に向かってコンポーネントを追加していくレイアウトマネージャーです。


<< デバック方法 >>

Ctrl+Shift+F1で表示される、質問文のSwingコンポーネントツリーは以下です。(※)

Java

1 javax.swing.JPanel[null.contentPane,0,0,982x653, 2 javax.swing.JPanel[,0,0,982x653,layout=java.awt.CardLayout, 3 javax.swing.JPanel[,0,0,982x653,layout=java.awt.FlowLayout, 4 javax.swing.JPanel[,133,5,500x100,layout=java.awt.FlowLayout, 5 javax.swing.JLabel[,91,5,318x65,alignmentX=0.0,alignmentY=0.0, 6 javax.swing.JPanel[,638,25,210x60,layout=java.awt.FlowLayout, 7 javax.swing.JButton[,5,5,200x50,alignmentX=0.0,alignmentY=0.5, 8 javax.swing.JPanel[,0,0,982x653,hidden,layout=java.awt.FlowLayout

layout属性にBorderLayoutが存在しない=BorderLayoutを指定していない。

Java9以降はCtrl+Shift+F1キーは無効化されているので、frame.setVisible(true);後にframe.list();をソースコードに追記してくださいな。


<< まとめ >>
SwingFlowLayout以外のLayoutを使う時は以下の2つが必ず必要です。
a. JPanelのコンストラクタまたはJPanel#setLayoutLayoutを指定する。

質問コードのCardLayoutを元に例示すると

Java

1 this.panel = new JPanel(); 2 this.layer = new CardLayout(); 3 this.panel.setLayout(this.layer); // ←この行

■参考情報
レイアウトマネージャーの設定

b. JPanel#addの第二引数でコンポーネントの配置位置を指定する。(例外があります※1)

Java

1 this.panel.add(scene1, "menue"); // ←この行

※1 Absolute LayoutGridBagLayout、etc
ここでは書ききれないので、使用したいレイアウトマネージャのドキュメントを確認してくださいな。

■参考情報
コンポーネントの配置位置を指定する


あとSwingで画面レイアウトを作成する時は、WindowBuilderを使ってくださいな。

投稿2018/08/14 15:44

編集2018/08/14 20:00
umyu

総合スコア5846

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問