GUI 组件的位置、宽度和高度何时设置?如果使用布局管理器,这些字段会受到怎样的影响?我有一个包含两个 slider 的面板,我想在其中一个 slider 旁边绘制一个矩形。下面是我的代码,用于初始化 GUI 组件并用 slider 之一旁边的矩形绘制它们:
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。当我调整小程序的大小并导致它被重新绘制时,字段不再为零。为什么它们最初都为零?这是我的小程序类中的代码:
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();
}
最佳答案
组件的位置和大小在 GUI 呈现时设置,在此之前它们是默认值 0
。对于桌面应用程序,当在顶级窗口上调用 pack()
时,或者在顶级窗口上调用 setVisible(true)
时,或者在组件本身(如果在渲染完成后将其添加到 GUI)时,会发生这种情况。
如果它是一个小程序,那么就是渲染该小程序的时候——这是在幕后完成的事情。您可以使用 Swing 监听器之一来监听此内容。我必须查找哪一个,可能是 AncestorListener ....编辑,是的,我认为这是正确的,尝试使用 AncestorListener。
考虑购买Filthy Rich Clients这是一本深入探讨 Swing 图形的精彩书籍。
关于java - JSlider getX(), getY() JApplet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10730418/