java获取组件位置_java – 获取swing组件的位置

将你的JPanel添加到JFrames contentPane,这样你就可以使用getX()和get()获得X和Y坐标,虽然我建议先添加所有组件,因为这些点可能随着更多组件的添加而变化,然后变为trashgod说只需在框架实例上调用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);在initComponents(JFrame框架)中产生全0,(因为它们已添加到框架中,但尚未调用`pack()).

0,0

0,0

但是在调用printPanelCompPoints(mainPanel)的JFrames实例上调用pack()之后的createAndShowUI()中;产生正确的共同作用:

44,26

0,52

99,26

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值