前提・実現したいこと
4*4のGridLayoutを作成し、それぞれの場所にJButtonを配置した後に、ImageIconを下の写真のようにJButtonがある任意の場所に置き換え(または上乗せ)が出来るようにしたいです。
発生している問題
下の写真のように4*5に拡張され、一番最後にImageIconが追加されています。
該当のソースコード
Main.java
Java
1public class Main { 2 3 public static void main(String[] args) { 4 Window window = new Window(4, 4); 5 window.setVisible(true); 6 } 7} 8
Window.java
Java
1import java.awt.Container; 2import java.awt.GridLayout; 3import java.awt.event.ActionEvent; 4import java.awt.event.ActionListener; 5import java.util.stream.IntStream; 6 7import javax.swing.ImageIcon; 8import javax.swing.JButton; 9import javax.swing.JFrame; 10import javax.swing.JLabel; 11import javax.swing.JPanel; 12 13public class Window extends JFrame { 14 15 private final GridLayout grid = new GridLayout(); 16 private final JButton[][] field; 17 18 public Window(int rows, int columns) { 19 if(rows < 0 || columns < 0) throw new IllegalArgumentException("(rows, columns) = (" + rows + ", " + columns + ")"); 20 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 21 Container container = getContentPane(); 22 setBounds(0, 0, columns * 80, rows * 80); 23 grid.setRows(rows); 24 grid.setColumns(columns); 25 container.setLayout(grid); 26 setContentPane(container); 27 field = new JButton[rows][columns]; 28 IntStream.range(0, rows).forEach(row -> IntStream.range(0, columns).forEach(column -> { 29 field[column][row] = new JButton(); 30 field[column][row].addActionListener(new ActionListener() { 31 @Override 32 public void actionPerformed(ActionEvent e) { 33 System.out.println("(" + row + ", " + column + ")"); 34 } 35 }); 36 add(field[column][row]); 37 })); 38 ImageIcon image = new ImageIcon("flag.png"); 39 JPanel panel = new JPanel(); 40 JLabel label = new JLabel(image); 41 panel.add(label); 42 container.add(panel); 43 } 44 45} 46 47 48 49
試したこと
Java APIのGridLayoutの項目を見たり、Google検索を使ってみましたが、置き換えることが出来そうなメソッドは見つけることができませんでした。
補足情報
Java SE 1.8
Eclipse 2019-03
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー