2010-02-20 72 views
2

有没有什么方法可以通过按钮创建边界类?像这样:example在面板的边框上放置一个按钮

一个重要的条件 - 按钮必须与边界位置对齐,因为面板可以改变其大小。所以imho LayeredPane不适合这个 - 对此没有任何理由。

有一个想法 - 模仿按钮:

  • 创建我的类面板按钮的
  • 重写paintComponent()和绘画图像在边界
  • 覆盖鼠标事件为它和使用它像按钮

但是。也许有办法在边界上放置真正的按钮?

回答

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执行所有操作(处理翻转,布防状态等),否则看起来不太可能。

+0

谢谢。正如我以为... 好吧,似乎我选择了正确的道路 - 将使用图像。这将是NetBeans的一个摆动组件。那就是为什么。更容易创建ImageButton类(状态,翻转等)。更适合我的目的。另外这个按钮肯定会是小图标。所以... 无论如何,再次感谢:) – imp 2010-02-20 22:06:00

0

你一定要看看Using Layout ManagersHow to Use BoxLayout中的第二个例子看起来很像您的示例。

附录:如Creating Custom Borders所述,可能延长AbstractBorder,以达到预期的效果。您可以传入按钮的侦听器,如讨论here,或维护您自己的侦听器列表。

+0

不,这是不适合的。 我用黄色标记了示例图像上的按钮,我需要将它放在边界上。 布局不允许我以这种方式将一个组件放在另一个组件上。 – imp 2010-02-20 20:07:18

+0

对不起,我错过了你的问题的本质。 – trashgod 2010-02-20 21:06:44

+0

是的,我想过。但这种方式有同样的麻烦:) Allready决定使用图像。 谢谢。 – imp 2010-02-20 22:14:26

1

Component Border类旨在允许您将组件作为边框添加到任何组件。

默认行为是在现有边框内添加组件。我没有做一个完整的测试,但它看起来像这个类可以定制添加到现有的边界顶部的组件:

// component.setLocation((int)x2, (int)y2); 
component.setLocation(10, 0); 
相关问题