如何在Swing中绘制布局单元格及其边缘?

3
在Swing(也包括AWT)中,LayoutManager决定ContainerComponent的大小和位置,不绘制边缘和线条...
对于一些教育目标,如何绘制这些线条?(例如重写Container类的paintComponents()等...)
一个解决方案是根据每个布局的规则计算所有内容以获得坐标,但是否有一种方法可以使用布局本身来实现此功能?

我不确定我理解需求或问题。但是在将每个组件添加到容器之前,您可以将其添加到带边框的容器中。而且,通过“带边框”,我指的是像LineBorder这样具有非透明颜色的可见边框。至于为什么要先将它们添加到容器中,那是因为某些组件(例如按钮)已经有了边框 - 这可能会根据用户操作(如组件具有输入焦点)而改变。 - Andrew Thompson
1
一种替代策略(仅适用于不透明组件)是为父容器赋予独特的颜色,并在组件不同区域之间给布局添加一些内边距。我认为这对某些布局来说是可行的,但对其他布局可能不太适用。 - Andrew Thompson
@AndrewThompson 感谢您的编辑和评论。 - Mehran Ghofrani
1个回答

2

如果您想让所有组件都有边框,可以使用循环。以下方法将为位于JFrame的内容面板中的所有Swing组件(实际上是JComponent)绘制边框:

Container cont = frame.getContentPane();

Component[] components = cont.getComponents();
List<JComponent> list = new ArrayList<>();
for (Component comp : components) {
    if (comp instanceof JComponent) {
        list.add((JComponent) comp);
    }
}
for (JComponent jComponent : list) {
    jComponent.setBorder(BorderFactory.createLineBorder(Color.black,2));
}

这是你所得到的内容(忽略菜单栏,它来自之前的问题): output

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接