以下に示す2つの例は同じです。どちらも同じ結果を生成することになっています。たとえば、JPanelに表示される画像の座標を生成します。例1は完全に機能します(画像の座標を出力します)が、例2は座標に0を返します。
どちらの例でも、パネルを追加した後にsetvisible(true)を配置したので、なぜだろうと思っていました。唯一の違いは、使用した例1extends JPanel
と例2です。extends JFrame
例1:
public class Grid extends JPanel{
public static void main(String[] args){
JFrame jf=new JFrame();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final Grid grid = new Grid();
jf.add(grid);
jf.pack();
Component[] components = grid.getComponents();
for (Component component : components) {
System.out.println("Coordinate: "+ component.getBounds());
}
jf.setVisible(true);
}
}
例2:
public class Grid extends JFrame {
public Grid () {
setLayout(new GridBagLayout());
GridBagLayout m = new GridBagLayout();
Container c = getContentPane();
c.setLayout (m);
GridBagConstraints con = new GridBagConstraints();
//construct the JPanel
pDraw = new JPanel();
...
m.setConstraints(pDraw, con);
pDraw.add (new GetCoordinate ()); // call new class to generate the coordinate
c.add(pDraw);
pack();
setVisible(true);
}
public static void main(String[] args) {
new Grid();
}
}