Java 调用pack()后,如何在面板上画一条线?

Java 调用pack()后,如何在面板上画一条线?,java,swing,user-interface,awt,Java,Swing,User Interface,Awt,我正在用Java编写一个小型GUI,使用Swing组件。我的程序使用几个重叠面板,其大小在调用“pack()”时确定 我的问题是这个。在pack()之前,我需要知道特定JPanel的尺寸,因为我需要在它下面垂直画一条线。我不能得到这个高度尺寸,但直到包被调用 我在pack命令之前输入了一个System.out.println(myPanel.getSize())调用&它返回(0,0)。当输入后,它返回面板的实际尺寸。。。如你所料 那么,一个人如何在一个面板上沿着其整个长度画一条线,或者不知道它的

我正在用Java编写一个小型GUI,使用Swing组件。我的程序使用几个重叠面板,其大小在调用“pack()”时确定

我的问题是这个。在
pack()
之前,我需要知道特定
JPanel
的尺寸,因为我需要在它下面垂直画一条线。我不能得到这个高度尺寸,但直到包被调用

我在pack命令之前输入了一个
System.out.println(myPanel.getSize())
调用&它返回
(0,0)
。当输入后,它返回面板的实际尺寸。。。如你所料


那么,一个人如何在一个面板上沿着其整个长度画一条线,或者不知道它的开始长度,或者在调用pack之后以某种方式这样做?

您可以通过向面板添加一个
组件侦听器来实现这一点。每当调整面板大小时,都会触发其
componentResistized()
事件。在
componentresistized()
方法中,您将始终获得面板的实际大小。试试下面的例子,自己看看

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());
  }
}

“在面板上沿其整个长度画一条线”DYM位于面板的左侧或右侧,或位于两者之间的某个位置?这条路线的目的是什么?它为最终用户提供了什么?该行是作为“括号”存在的,否则它最终会。我想在矩形JPanel的两侧创建“方括号”。所以,我想,要么把真实的图像放在那里,要么把它们画进去。我决定尝试画它们。“所以,我想,要么把真实的图像放在那里,要么把它们画进去。我决定尝试画它们。”我选择了选项“C”。一种自定义
JComponent
(一种
BracketComponent
),它接受构造函数中的常量(
Bracket.LEFT
Bracket.RIGHT
),以决定渲染的方式。自定义组件将返回一个首选大小,以给出布局提示,说明渲染的大小,但是当调用渲染时,它将使用分配给它的空间。非常感谢,这似乎正是我想要的。