0

我尝试了几种方法,但仍然没有找到解决方案。我在框架中有一个 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);
    }
}
4

1 回答 1

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);

如果定位不是您想要的,请查看布局管理器的视觉指南,以选择最适合您需求的布局管理器。

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

于 2013-09-15T17:14:19.587 回答