当前位置: 首页 > 面试题库 >

获取秋千组件的位置

鲜于高明
2023-03-14
问题内容

我已经将一些JPanels放到另一个JPanel中,它的布局是Box
Layout和Y轴。在放置所有面板之后,我需要从JPanel容器面板中获取每个添加的JPanel的Y位置。但是,当我尝试获得该值时,每个JPanel的Y位置总会得到零。请告诉我如何从JPanel容器JPanel获取每个Jpanel的Y位置。

这就是我所做的

JPanel panelHolder = new JPanel(new BoxLayout(this, BoxLayout.Y_AXIS));
for(int i = 0; i< 10; i++){
   JPanel p = new JPanel(); 
   panelHolder.add(p);
}

int componentCount = panelHolder.getComponentCount();

for (int j = 0; i < componentCount ; j++) {

  Component c = pnlRowHolder.getComponent(i);
  JPanel p = (JPanel)c;
  System.out.println(p.getY());//I get zero for all
}

问题答案:

将您的内容添加JPanelJFrames的 contentPane中,
从而使您能够使用X和Y坐标getX()get()尽管我建议先添加所有组件,因为随着添加的组件的增加,这些点可能会发生变化,然后如垃圾桶所说,只需调用pack()框架html" target="_blank">实例。

我做了一个简短的示例来演示:

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(JFrame frame)会产生全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



 类似资料:
  • 我把一些JPanel放到另一个JPanel中,它的布局是长方体布局和Y轴。在我放置了所有面板之后,我需要从JPanel容器面板获取每个添加的JPanel的Y位置。当我每次都得到零的时候。请告诉我如何从Jpanel容器Jpanel获取每个Jpanel的Y位置。 这就是我所做的,

  • 问题内容: 我是新手,不胜感激。 在这段代码中,我要把一张卡片面朝上,如果发现它们不匹配,我希望它们再次面朝下。 此刻正在发生的事情:1.单击第一张卡片时翻转2.单击第二张卡片时,发生以下两种情况中的任何一种(a)如果它们相同,它们都停留在我想要的状态(b)如果它们并不相同,我根本看不到第二张卡,因为第二张卡会立即重新显示卡的背面(以及我的方法中定义的上一张卡的背面)。 我以为放入睡眠计时器可能会

  • 问题内容: 我有一个很大的swing应用程序,我想让它记住所有窗口,jframe等的大小。因此,如果用户按自己的喜好调整窗口大小,则下次窗口看起来完全一样。 我是否有更好的解决方案,但是可以在“首选项”中手动编写每个窗口的位置/大小?有什么方便的方法可以在JTable中存储列的顺序吗?可能是一些框架?只是不想写样板。 不幸的是,整个大型应用程序的序列化不是一种选择。 问题答案: 不,没有。不要忘了

  • 问题内容: 每当我读到Swing时,他们都会说它们是重量轻的组件。所以我只是在Google Swing上搜索,发现这意味着Swing不依赖于本地同级。这就是为什么它们被称为 “轻量级” ?我的意思是重量轻,我认为Swing组件可能比AWT组件占用更少的内存。不是吗 问题答案: Swing被认为是轻量级的,因为它是完全用Java实现的,而无需调用本机操作系统来绘制图形用户界面组件。 另一方面,AWT

  • 问题内容: 我正在使用Eclipse IDE开发桌面(秋千)应用程序。我有三个组合框(国家,州和城市),选择新的国家或省时需要自动更新数据。我搜索了很多信息,但是我发现的所有实现都是在Ajax或NetBeans中的bean绑定框架上完成的。我通过ItemEvent尝试了一种解决方案,但是在启动应用程序时遇到了问题,该应用程序加载了国家列表,但没有加载其他列表。通过选择一个国家,国家列表而不是城市列

  • 问题内容: 我想自定义JTextField对象的高度和宽度。我尝试使用setSize方法,将宽度和高度作为尺寸和int传递。但是它们似乎都不起作用。我是否缺少某些内容,例如面板上的一些强制性方法调用或某些使大小自定义有效的内容?请帮忙。提前致谢。 编辑:这是一些代码: 问题答案: 让布局管理器照顾您的Swing组件的尺寸,但是如果绝对必要,请与尊重该属性的布局管理器结合使用。