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

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

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

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

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

Q&A

2回答

6156閲覧

java swing パネルの左上にラベルを配置できない

entd270

総合スコア19

Java

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

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

0グッド

0クリップ

投稿2018/06/21 06:18

編集2018/06/21 06:29

前提・実現したいこと

パネルの左上に文字を配置したいのです。

javaのswingの勉強をしています。パネルの左上に文字を配置したいのですが、
色々調べて試してみても、どうしてもパネルの上中央に配置されてしまいます。

発生している問題・エラーメッセージ

パネルの左上に文字を配置できない

該当のソースコード

import javax.swing.;
import java.awt.event.
;
import java.awt.*;
import javax.swing.border.LineBorder;

public class Test extends JFrame {
JPanel panel= new JPanel();
JLabel label = new JLabel("あ");
LineBorder border = new LineBorder(Color.black, 1,false);

public static void main(String[] args) {
new Test();
}

Test(){ getContentPane().setLayout(null); panel.setBounds(7,7,90,170); panel.add(label); panel.setBorder(border); getContentPane().add(panel); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setVisible(true); }

}

import javax.swing.*; import java.awt.event.*; import java.awt.*; import javax.swing.border.LineBorder; public class Test extends JFrame { JPanel panel= new JPanel(); JLabel label = new JLabel("あ"); LineBorder border = new LineBorder(Color.black, 1,false); public static void main(String[] args) { new Test(); } Test(){ getContentPane().setLayout(null); panel.setBounds(7,7,90,170); panel.add(label); panel.setBorder(border); getContentPane().add(panel); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setVisible(true); } }

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

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

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

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

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

guest

回答2

0

座標指定で配置する - JavaDrive

例えばほとんどのコンポーネントの親クラスであるComponentクラスで用意されている「setBounds」メソッドを使って位置及びサイズを指定してみます。

setBounds public void setBounds(int x, int y, int width, int height)
このコンポーネントを移動し、サイズ変更します。左上隅の新しい位置は x お

よび y によって指定され、新しいサイズは width および height によって指
定されます。

パラメータ:
x - このコンポーネントの新しい x 座標
y - このコンポーネントの新しい y 座標
width - このコンポーネントの新しい width
height - このコンポーネントの新しい height

1番目と2番目の引数で座標を指定し、3番目と4番目の引数でサイズを指定します。 実際の使い方は次のようになります。

JPanel p = new JPanel();
p.setLayout(null);

JButton button = new JButton("button");
button.setBounds(10, 10, 100, 50);

p.add(button);

↑「label」に「setBounds」しましょう。

追記

label.setBounds(8,8,5,5);

を追加してみたのですが、やはり文字がパネルの上部中央に表示されてしまいました。

setLocationを試してみてはどうでしょう?

public void setLocation(int x, int y) このコンポーネントを新しい位置に移動します。新しい位置の左上隅は、このコンポーネントの親の座標空間内のxおよびyパラメータによって指定されます。 このメソッドではレイアウトに関連する情報が変更されるため、コンポーネント階層が無効になります。 パラメータ: x - 親の座標空間内の新しい位置の左上隅のx座標 y - 親の座標空間内の新しい位置の左上隅のy座標

投稿2018/06/21 06:47

編集2018/06/21 07:53
tkturbo

総合スコア5572

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

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

entd270

2018/06/21 07:32 編集

回答ありがとうございます。 文字の場合、widthとheightでいいのでしょうか。。。 試しに label.setBounds(8,8,5,5); を追加してみたのですが、やはり文字がパネルの上部中央に表示されてしまいました。
tkturbo

2018/06/21 07:54

回答に追記しました。
entd270

2018/06/21 08:14

回答ありがとうございます。 申し訳ありません、 setLocationを試したのですが、やはりうまく配置できませんでした。 import javax.swing.*; import java.awt.event.*; import java.awt.*; import javax.swing.border.LineBorder; public class Test extends JFrame { JPanel panel= new JPanel(); JLabel label = new JLabel("あ"); LineBorder border = new LineBorder(Color.black, 1,false); public static void main(String[] args) { new Test(); } Test(){ getContentPane().setLayout(null); panel.setBounds(7,7,90,170); panel.add(label); label.setLocation(8,8); panel.setBorder(border); getContentPane().add(panel); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setVisible(true); } } なぜ指定した場所に配置できないのでしょうか。
tkturbo

2018/06/21 08:20

> panel.add(label); > label.setLocation(8,8); ↑順番逆
entd270

2018/06/21 14:49

順番を入れ替えてもダメでした。
yukkuri

2018/09/19 13:53

もしかしたらレイアウトでは? JPanel panel = new JPanel( null ); このようにラベルを張り付けるパネルをしてみては?
guest

0

JPanel のレイアウトの初期値は BorderLayout ではなかったでしょうか.
add の第2引数を指定しない場合, BorderLayout.CENTER が指定されたと見なされたと思います.

投稿2019/02/03 05:59

jimbe

総合スコア12648

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問