如何使用MigLayout将JLabel与JPanel上的一行连接?

时间:2014-09-08 12:54:06

标签: java swing jlabel paintcomponent

我在google上搜索了很多关于这个主题的内容,但是无法提出正确的解决方案。我尝试使用Graphics paintComponent进行“绘画”,一切似乎都很好,但我的JPanel上没有显示直线。 创建JLabels的部分代码:

frame = new JFrame();
        frame.setTitle("New family tree");
        ...
                JPanel panel = new JPanel();
        panel.setBackground(new Color(30, 144, 255));
        frame.getContentPane().add(panel, BorderLayout.EAST);
        panel.setLayout(new MigLayout("", "[]", "[][][][][][][][]"));


    JButton newPersonButton = new JButton("New Person");
    panel.add(newPersonButton, "cell 0 5");

    tabbedPane = new JTabbedPane(JTabbedPane.TOP);
    frame.getContentPane().add(tabbedPane, BorderLayout.CENTER);

    scrollPane = new JScrollPane();
    tabbedPane.addTab("Tree", null, scrollPane, null);

    panel_1 = new JPanel();
    scrollPane.setViewportView(panel_1);
    panel_1.setLayout(new MigLayout("",
            "[][][][][][][][][][][][][][][][][]",
            "[][][][][][][][][][][][][][][][][][][][][]"));

    final JLabel lblAddGreatgrandmother = new JLabel("Add Great-grandmother");
    panel_1.add(lblAddGreatgrandmother, "cell 3 4,growx");

    final JLabel lblAddGrandmother_1 = new JLabel("Add Grandmother");
    panel_1.add(lblAddGrandmother_1, "cell 2 5");

我应该使用绘画吗?或者将JLabels放入数组列表并使用Point?我会批评任何帮助。

编辑:可运行的示例 - http://pastebin.com/NFug1QA1

1 个答案:

答案 0 :(得分:2)

java-sl.com/connector解决方案的问题在于连接本身成为一个组件 - 即需要布局,接受事件等。我在几年前提出了一个解决方案,你可以在我的{{{ 3}}。具体来说,请参阅ConnectionPanel和Connection。

...另外,根据我的经验,当布局管理器设置为null并且组件不限于锁定到位时,它们的各种连接最有用。但是你会知道什么是最适合你的情况。