我正在使用Swing组件以Java编写小型GUI。我的程序使用了几个重叠的面板,面板的大小在调用“ pack()”时决定。
我的问题是这个。我需要在JPanel
之前知道特定pack()
的尺寸,因为我需要在垂直下方画一条线。但是直到调用pack,我才能得到这个高度尺寸。
我在pack命令之前进行了System.out.println(myPanel.getSize())
调用,它返回了(0, 0)
。放入之后,它会返回面板的实际尺寸……就像您期望的那样。
那么,如何在面板的整个长度上画一条线,而又不知道其开始长度,还是在调用pack后以某种方式这样做呢?
答案 0 :(得分:1)
您可以通过在面板上添加ComponentListener
来实现。每当调整面板大小时,都会触发其componentResized()
事件。在componentResized()
方法中,您将始终获得面板的实际大小。尝试下面的示例,然后自己查看。
import javax.swing.*;
import java.awt.*;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
public class PanelResize
{
public static void main(String[] args)
{
CustomPanel panel = new CustomPanel();
panel.addComponentListener(new ComponentAdapter()
{
@Override
public void componentResized(ComponentEvent e)
{
System.out.println(panel.getSize());
panel.repaint();
}
});
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(panel);
f.setBounds(300, 200, 400, 300);
f.setVisible(true);
}
}
class CustomPanel extends JPanel
{
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.blue);
g.drawLine(getWidth()/2, 0, getWidth()/2, getHeight());
}
}