JButton和jgraphx不会同时出现

时间:2013-09-15 16:54:17

标签: java swing jframe jbutton jgraphx

我尝试了几种方法,但仍未找到解决方案。我在一个框架中有一个jgraph,我想在该框架中也在特定位置添加一个Jbutton。但是当我运行程序时,我只得到其中一个,因为它们扩展到整个窗口。任何想法如何解决这个问题?

提前致谢。

public class GUIquery extends JFrame {

    JFrame frame;
    static JGraph jgraph;
    final mxGraph graph = new mxGraph();
    final mxGraphComponent graphComponent = new mxGraphComponent(graph);

    public GUIquery() {
        super("Test");
        GraphD();
        imgbtn();
    }

    public void GraphD() {
        Object parent = graph.getDefaultParent();
        graph.getModel().beginUpdate();
        try {
          ........         
        }catch  {
          ........  
        } finally  {
           graph.getModel().endUpdate();
        }
        getContentPane().add(graphComponent);    
    }    

    public void imgbtn() {
        JPanel jpanel = new JPanel();
        jpanel.setSize(100, 100);
        jpanel.setLocation(1200, 60);
        JButton imgbtn = new JButton("Export as Image");
        imgbtn.setSize(100, 100);
        imgbtn.setLocation(1200, 60);
        jpanel.add(imgbtn);
        add(jpanel);
    }

    public static void main(String[] args) {
        GUIquery frame = new GUIquery();
        frame.setLayout(null);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 320);
        frame.setVisible(true);
    }
}

1 个答案:

答案 0 :(得分:1)

不要使用null布局。它们不可避免地会导致麻烦。

从您的代码段中无法确定您希望它们相对于彼此的位置,以下内容将按钮放在图表下方。

默认情况下,内容窗格使用BorderLayout。对于BorderLayout,您需要在不同位置使用场所组件:

// the default position, but it does not hurt to be explicit
add(graph, BorderLayout.CENTER);

...

// and the panel
add(jpanel, BorderLayout.SOUTH);

如果定位不符合您的要求,请查看visual guide to layout managers以选择最适合您需求的布局管理器。

在按钮面板中,setLocation()setSize()来电无效。面板的布局管理器负责设置按钮的边界。如果默认FlowLayout不是您想要的,请使用该指南为该面板选择另一个。