将您的内容添加
JPanel到
Jframes的 contentPane中,
从而使您能够使用X和Y坐标
getX(),
get()尽管我建议先添加所有组件,因为随着添加的组件的增加,这些点可能会发生变化,然后如垃圾桶所说,只需调用
pack()框架实例。
我做了一个简短的示例来演示:
import java.awt.BorderLayout;import javax.swing.Jframe;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.SwingUtilities;public class Test { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new Test().createAndShowUI(); } }); } private void createAndShowUI() { Jframe frame = new Jframe("Test"); frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE); frame.setResizable(false); initComponents(frame); frame.pack();//call pack printPanelCompPoints(mainPanel);//produces correct coords frame.setVisible(true); } private JPanel mainPanel; private void initComponents(Jframe frame) { mainPanel = new JPanel(new BorderLayout()); JPanel centerPanel = new JPanel(); JPanel northPanel = new JPanel(); JPanel southPanel = new JPanel(); JPanel westPanel = new JPanel(); JPanel eastPanel = new JPanel(); centerPanel.add(new JLabel("CENTER")); northPanel.add(new JLabel("NORTH")); eastPanel.add(new JLabel("EAST")); southPanel.add(new JLabel("SOUTH")); westPanel.add(new JLabel("WEST")); mainPanel.add(centerPanel, BorderLayout.CENTER); mainPanel.add(northPanel, BorderLayout.NORTH); mainPanel.add(southPanel, BorderLayout.SOUTH); mainPanel.add(eastPanel, BorderLayout.EAST); mainPanel.add(westPanel, BorderLayout.WEST); frame.getContentPane().add(mainPanel); printPanelCompPoints(mainPanel);//produces all 0's } private void printPanelCompPoints(JPanel mainPanel) { for (int i = 0; i < mainPanel.getComponentCount(); i++) { System.out.println(mainPanel.getComponent(i).getX() + ", " + mainPanel.getComponent(i).getY()); } }}如您所见,调用
printPanelCompPoints(mainPanel);in
initComponents(Jframeframe)会产生全0(因为它们已添加到帧中,但尚未调用`pack())。
0,0
0,0
0,0
0,0
0,0
然而,在
createAndShowUI()打完电话后
pack()对
Jframe小号实例调用
printPanelCompPoints(mainPanel);产生正确的合作odrinates:
44,26
0,0
0、52
99、26
0、26



