🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

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

Q&A

解決済

1回答

1566閲覧

JPanelに画像付きJLabelを設置すると謎の空白ができる。

cretter

総合スコア91

Java

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

1グッド

0クリップ

投稿2020/12/23 09:12

編集2020/12/23 09:31

前提・実現したいこと

現在javaの練習のためにRPGを作っています。
マップを表示するためにJFrameに、JLabelに画像を表示してJPanelに設置したのですが謎の空間が横にはないのですが縦にはあって、そのせいでしっかりと画像を敷き詰められません。
どうすればこの空間を消せますか。

イメージ]

該当のソースコード

java

1import javax.swing.*; 2import javax.swing.border.*; 3import java.awt.*; 4public class story01{ 5 public static void main(String[] args){ 6 story f1 = new story("緋色","勇者"); 7 } 8} 9class story extends JFrame{ 10 story(String name,String work){ 11 setTitle("ゲーム画面"); 12 setSize(590,485); 13 setResizable(true); 14 setLocationRelativeTo(null); 15 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 16 setLayout(null); 17 18 JPanel board = new JPanel(); 19 board.setLayout(new GridLayout(7,9)); 20 board.setBackground(Color.WHITE); 21 board.setBounds(0,0,576,448); 22 23 ImageIcon glass = new ImageIcon("見せられないよ/glass.png"); 24 25 JPanel[] p_box = new JPanel[63]; 26 JLabel[] l_box = new JLabel[63]; 27 for(int i=0;i<63;i++){ 28 p_box[i] = new JPanel(); 29 l_box[i] = new JLabel(); 30 p_box[i].setBackground(Color.WHITE); 31 l_box[i].setIcon(glass); 32 p_box[i].add(l_box[i]); 33 board.add(p_box[i]); 34 } 35 36 add(board); 37 setVisible(true); 38 } 39}

補足情報(FW/ツールのバージョンなど)

java jdk-14.0.2

java version "14.0.2" 2020-07-14
Java(TM) SE Runtime Environment (build 14.0.2+12-46)
Java HotSpot(TM) 64-Bit Server VM (build 14.0.2+12-46, mixed mode, sharing)

TN8001👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

ImageIconJPanelでくるむ必要はあるのでしょうか?
JPanelに入れる必要がなければ、以下蛇足になります。

JPanelFlowLayoutがデフォルトです。
JPanel (Java Platform SE 8 )

FlowLayoutはデフォルトで、コンポーネント間に5px?隙間を開けます。
FlowLayout (Java Platform SE 8 )

ではなぜ横は隙間が開かないのかは、よくわかりません^^;

Java

1import java.awt.Color; 2import java.awt.FlowLayout; 3import java.awt.GridLayout; 4import java.net.MalformedURLException; 5import java.net.URL; 6import javax.swing.ImageIcon; 7import javax.swing.JFrame; 8import javax.swing.JLabel; 9import javax.swing.JPanel; 10 11class Story extends JFrame { 12 public static void main(String[] args) throws MalformedURLException { 13 Story f1 = new Story("緋色", "勇者"); 14 } 15 16 Story(String name, String work) throws MalformedURLException { 17 setTitle("ゲーム画面"); 18 setSize(590, 485); 19 setResizable(true); 20 setLocationRelativeTo(null); 21 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 22 setLayout(null); 23 24 JPanel board = new JPanel(new GridLayout(7, 9)); 25 board.setBackground(Color.WHITE); 26 27// board.setBounds(0, 0, 576, 448); 28 board.setBounds(0, 0, 288, 224); // 使用画像が 32*32 なので 29 30 31 URL url1 = new URL("https://teratail-v2.storage.googleapis.com/uploads/avatars/u16/163290/UoHH5sjC_thumbnail_32x32.jpg"); 32 URL url2 = new URL("https://teratail-v2.storage.googleapis.com/uploads/avatars/u13/132786/KnkDDC5A_thumbnail_32x32.jpg"); 33 ImageIcon glass1 = new ImageIcon(url1); 34 ImageIcon glass2 = new ImageIcon(url2); 35 36 // JPanelに入れる必要がなければ単にこれでよい 37// for (int i = 0; i < 63; i++) { 38// JLabel label = new JLabel(i % 2 == 0 ? glass1 : glass2); 39// board.add(label); 40// } 41 42 43 JPanel[] p_box = new JPanel[63]; 44 JLabel[] l_box = new JLabel[63]; 45 for (int i = 0; i < 63; i++) { 46 47 // hgap vgap を0にする 48 p_box[i] = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0)); 49 l_box[i] = new JLabel(i % 2 == 0 ? glass1 : glass2); 50 p_box[i].setBackground(Color.WHITE); 51 p_box[i].add(l_box[i]); 52 board.add(p_box[i]); 53 } 54 55 add(board); 56 setVisible(true); 57 } 58}

アプリ画像

投稿2020/12/23 14:15

編集2020/12/23 14:18
TN8001

総合スコア9855

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

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

cretter

2020/12/23 15:15

new FlowLayout(FlowLayout.LEFT, 0, 0)の案は浮かんできていませんでした! 試してみたところうまくいきました。 わかりやすい解説も入れてもらってありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問