Java JGraphX正在破坏Swing组件的边界

Java JGraphX正在破坏Swing组件的边界,java,swing,jbutton,jgraphx,jgraph,Java,Swing,Jbutton,Jgraphx,Jgraph,我试图实现一些自行编写的GUI元素(如Java swing按钮)和JGraphX之间的交互。为了做到这一点,我首先只想在JGraph元素旁边显示一个按钮——我被卡住了 我的显示按钮本身的代码工作正常: import javax.swing.*; public class HelloWorld extends JFrame { public HelloWorld() { super("Everything works"); } public

我试图实现一些自行编写的GUI元素(如Java swing按钮)和JGraphX之间的交互。为了做到这一点,我首先只想在JGraph元素旁边显示一个按钮——我被卡住了

我的显示按钮本身的代码工作正常:

import javax.swing.*;    

public class HelloWorld extends JFrame {

public HelloWorld()
    {
         super("Everything works");
    }    

public static void main(String[] args)
    {
        hello_world frame = new hello_world();
        frame.setTitle("bub");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 200);

        button.setBounds(10, 10, 100, 50);

        frame.setVisible(true);

        frame.add(button);
    }
}

但当我添加JGraph组件时,按钮就会全屏显示。我不知道为什么以及如何防止这种情况。我的代码:

import javax.swing.*;

import com.mxgraph.swing.mxGraphComponent;
import com.mxgraph.view.mxGraph;

public class HelloWorld extends JFrame {

    private mxGraph graph;
    private Object window;

    public HelloWorld()
    {
        super("Nothing works");

        graph = new mxGraph();
        window = graph.getDefaultParent();

        graph.getModel().beginUpdate();

        try
        {
            Object v2 = graph.insertVertex(window, null, "Hello World!", 200, 150, 80, 30);

        }
        finally
        {
            graph.getModel().endUpdate();
        }

        mxGraphComponent graphComponent = new mxGraphComponent(graph);
        getContentPane().add(graphComponent);
    }

    public static void main(String[] args)
    {
        hello_world frame = new hello_world();


        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 200);

        JButton button = new JButton("left");
        button.setBounds(10, 10, 100, 50);

        frame.setVisible(true);

        frame.add(button);
    }

}
结果如下所示(我手动调整了窗口的大小以显示按钮。当然,按钮只会填充JGraph组件后面的空间,因此不可见):


Swing使用布局管理器。JFrame的默认布局管理器是
BorderLayout
。将组件添加到框架时,使用的默认约束是
BorderLayout.CENTER
。只能将单个组件添加到
边框布局的
中心

挫折(…)只会暂时起作用。一旦调整框架的大小,就会调用布局管理器,并根据布局管理器的规则为按钮指定新的大小/位置

解决方案是正确使用布局管理器。我不确定您想要实现什么样的布局,所以我建议您阅读Swing教程中的工作示例来开始。然后,可以使用不同的布局管理器嵌套面板,以实现所需的效果

从一些简单的事情开始,比如:

frame.add(button, BorderLayout.PAGE_END);
frame.setVisible(true);
//frame.add(button);

上图将在框架的中心显示图形,并在底部显示按钮。

类名中的每个工作都应以大写字符开头。“hello_world”应该是
HelloWorld
。如果有疑问,请遵循JavaAPI中的类名格式。你是对的,但我很确定这不是主要问题;)
我很确定这不是主要问题
这就是我添加它作为注释的原因。论坛将突出显示班级名称。当您遵循标准时,它使我们(或任何其他人)更容易阅读您的代码。没有理由不遵守标准。人人受益。