Java 调用pack()后,如何在面板上画一条线?
我正在用Java编写一个小型GUI,使用Swing组件。我的程序使用几个重叠面板,其大小在调用“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)。当输入后,它返回面板的实际尺寸。。。如你所料 那么,一个人如何在一个面板上沿着其整个长度画一条线,或者不知道它的
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
),以决定渲染的方式。自定义组件将返回一个首选大小,以给出布局提示,说明渲染的大小,但是当调用渲染时,它将使用分配给它的空间。非常感谢,这似乎正是我想要的。