GUI组件的位置,宽度和高度何时设置?如果使用布局管理器,这些字段如何实现?我有一个包含两个滑块的面板,我想在其中一个滑块旁边画一个矩形。这是我的代码,用于初始化我的GUI组件并在其中一个滑块旁边用矩形绘制它们:
public PhotoSliders()
{
initComponents(); //from the netbeans GUI designer
}
public void setColorRect() //initialize a colored rectangle
{
colorRect = new ColorRect(Color.RED, (double)(emSlider.getX())/getWidth(), (double)(emSlider.getY())/getHeight());
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
colorRect.paintColorRect(g, getWidth(), getHeight());
}
我发现emSlider.getX(),emSlider.getY(),getWidth()和getHeight()最初都是0。当我调整我的applet大小并因此重新绘制它时,字段不再为零。为什么它们最初都为零?这是我的applet类中的代码:
public void init() //initialize the Applet Class
{
setLayout(new BorderLayout());
slidersPanel = new PhotoSliders();
JPanel north = new JPanel(new BorderLayout());
north.add(slidersPanel, BorderLayout.WEST);
add(north, BorderLayout.NORTH);
add(photoEffect, BorderLayout.CENTER);
slidersPanel.setColorRect();
}
public void paint(Graphics g) //paint the photoEffect
{
super.paint(g);
slidersPanel.setColorRect();
}
答案 0 :(得分:1)
在渲染GUI时设置组件的位置和大小,在此之前它们是默认值0
。对于桌面应用程序,当在顶级窗口上调用pack()
或在顶级窗口调用setVisible(true)
时,或者在组件本身(如果在之后添加到GUI中)时,会发生这种情况。一切都已经呈现。
如果它是一个applet,那么就是渲染applet的时候 - 这是在幕后完成的。您可以使用其中一个Swing侦听器来监听此事。我必须查找哪一个,可能是AncestorListener ....编辑,是的我认为这是正确的,尝试使用AncestorListener。
考虑购买Filthy Rich Clients以获得一本在Swing图形上深入了解的精彩书籍。