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

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

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

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

Q&A

解決済

2回答

1394閲覧

JAVAのGUIのsetBoundsで座標を設定したボタンの位置がずれてしまう。

Penquin

総合スコア1

Java

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

0グッド

0クリップ

投稿2021/12/30 00:53

イメージ説明
javaのguiで質問です。
public class ope extends JFrame{
public static void main(String args[]) {
ope f = new ope("test");
f.setVisible(true);
}
ope(String title){
setTitle(title);
setSize(1200,1000);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
Container cp = getContentPane();
cp.setLayout(null);
JButton btn = new JButton("戻る");
btn.setBounds(0, 775, 150, 225); ←ここ
cp.add(btn);
}
public void paint(Graphics g){
super.paint(g);
Graphics2D g2 = (Graphics2D)this.getGraphics();
Rectangle rect = new Rectangle();
rect.setRect(200,800,800,200);
g2.setColor(Color.WHITE);
g2.fill(rect);
rect.setRect(0,775,1200,25);
g2.setColor(Color.BLACK);
g2.fill(rect);
rect.setRect(150,775,50,225); ←ここ
g2.setColor(Color.BLACK);
g2.fill(rect);
rect.setRect(1000,775,50,225);
g2.setColor(Color.BLACK);
g2.fill(rect);
}
}
"←ここ" の部分についてで、座標の設定はどちらも同じなのになぜ画像のようにズレができてしまうのですか?
ボタンの仕様ですか?setRectとsetBoundsの違いですか?どうすれば解決できますか?

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

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

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

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

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

jimbe

2021/12/30 03:47

基本的にレイアウトにはレイアウトマネージャを用いたほうが良いと思うのですが、わざわざ絶対座標で指定する必要があるのでしょうか。
jimbe

2021/12/30 03:50

コードはマークダウン記法をご利用ください。 マークダウンに付きましてはヘルプをご参照ください。
guest

回答2

0

ベストアンサー

座標の設定はどちらも同じなのになぜ画像のようにズレができてしまうのですか?

JFrameのサイズや座標は、タイトルバーや枠も含みます。

Container cpはクライアントエリア(ウィンドウ内の白い部分)に入っているので、描画位置がずれます。

どうすれば解決できますか?

手軽に合わすなら、JPanelベースにすることでしょうか。

Java

1import java.awt.Color; 2import java.awt.Dimension; 3import java.awt.Graphics; 4import javax.swing.JButton; 5import javax.swing.JFrame; 6import javax.swing.JPanel; 7 8 9public class Test extends JPanel { 10 public static void main(String[] args) { 11 var f = new JFrame("test"); 12 f.add(new Test()); 13 f.pack(); 14 15 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 16 f.setLocationRelativeTo(null); 17 f.setVisible(true); 18 } 19 20 Test() { 21 setPreferredSize(new Dimension(200, 200)); 22 setLayout(null); 23 24 JButton btn = new JButton(); 25 btn.setBounds(10, 10, 100, 100); 26 add(btn); 27 } 28 29 @Override protected void paintComponent(Graphics g) { 30 super.paintComponent(g); 31 32 g.setColor(Color.RED); 33 // 完全に同じだと重なって見えないので、ひとまわり大きくした 34 g.fillRect(9, 9, 102, 102); 35 } 36}

アプリ画像

投稿2021/12/30 05:10

TN8001

総合スコア9326

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

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

0

public void paint(Graphics g){

Swing では paint では無く paintComponent をオーバーライドしてください。

座標の設定はどちらも同じ

同じに見えませんが。

ボタンの仕様ですか?setRectとsetBoundsの違いですか?

(ボタンに限りませんが)仕様であり、setRectとsetBoundsの違いです。

どうすれば解決できますか?

どういう状態が「解決」なのかが分かりません。

投稿2021/12/30 04:05

編集2021/12/30 06:14
jimbe

総合スコア12648

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問