有没有办法用它上面的按钮创建边框类?像这样:example
一个重要条件 - 按钮必须与边框位置对齐,因为面板可以改变其大小。所以imho LayeredPane不适合这个 - 它没有任何对齐。
有一个想法 - 模仿按钮:
但是。也许有办法将真正的按钮放在边框上?
答案 0 :(得分:1)
我认为标准边框无法实现这一点,主要是因为Border
不是Container
,因此无法添加其他组件。
但是,如果您愿意使用自定义边框实现,则可以伪造边框,例如:
private class BorderFaker extends JPanel
{
public BorderFaker()
{
add( new JButton( "Faked!" ) );
}
@Override
public void paintComponent( Graphics g )
{
super.paintComponent( g );
drawFauxBorder( g );
}
private void drawFauxBorder( Graphics g )
{
g.setColor( UIManager.getColor( "border" ) );
g.drawRect( 15, 15, getWidth() - 30, getHeight() - 30 );
}
}
这显示了你可以这样做的方式,但它引入了很多问题,例如区分你想要的边界内部和边界上的组件(我只是硬编码了“假! “示范按钮)。而且你仍然需要组织相对于“边界”的组件布局。它需要一些小心处理组件和一些方便的布局工作 - 正如@trashgod最初建议的那样。
尽管如此,我还是不知道,我宁愿做这样的事情并伪造边框,而不是伪造一个按钮。如果您绘制自己的按钮,则会失去对当前外观的依从性,除非您按下UI按钮执行所有操作(处理翻转,布防状态等),否则它看起来不太好。
答案 1 :(得分:1)
Component Border类旨在允许您将组件作为边框添加到任何组件。
默认行为是在现有边框内添加组件。我没有进行完整的测试,但看起来可以通过以下方式自定义类以在现有边框之上添加组件:
// component.setLocation((int)x2, (int)y2);
component.setLocation(10, 0);
答案 2 :(得分:0)
你一定要看Using Layout Managers。 How to Use BoxLayout中的第二个示例与您的示例非常相似。
附录:如AbstractBorder
所述,可以延长Creating Custom Borders以达到预期的效果。你可以传递按钮的监听器,如here所述,或维护你自己的监听器列表。