我正在使用 Swing 组件用 Java 编写一个小型 GUI。我的程序使用几个重叠的面板,其大小在调用“pack()”时决定。
我的问题是这样的。我需要在 pack()
之前知道特定 JPanel
的尺寸,因为我需要垂直向下画一条线。然而,在调用 pack 之前我无法获得这个高度尺寸。
我在 pack 命令之前放入了 System.out.println(myPanel.getSize())
调用,它返回 (0, 0)
。当放入之后,它会返回面板的实际尺寸......正如您所期望的那样。
那么,如何在面板的整个长度上画一条线,要么一开始不知道其长度,要么在调用 pack 后以某种方式这样做?
最佳答案
您可以通过向面板添加 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());
}
}
关于java - 调用 pack() 后如何在面板上画一条线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54399501/