Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用GridBagLayout将组件放置在特定(或多或少)位置?_Java_Swing_Layout Manager_Gridbaglayout - Fatal编程技术网

Java 如何使用GridBagLayout将组件放置在特定(或多或少)位置?

Java 如何使用GridBagLayout将组件放置在特定(或多或少)位置?,java,swing,layout-manager,gridbaglayout,Java,Swing,Layout Manager,Gridbaglayout,我想创建一个窗口,其中有一个背景图像和上面的组件。我已经设法让组件和背景“堆叠”,但我的问题是定位组件 我尝试过使用AbsoluteLayout,但似乎不起作用 这是迄今为止我的(初学者)代码: public class RegionPrompt extends JPanel { public RegionPrompt () throws IOException { JFrame frame = new JFrame("Map"); GridBagCon

我想创建一个窗口,其中有一个背景图像和上面的组件。我已经设法让组件和背景“堆叠”,但我的问题是定位组件

我尝试过使用AbsoluteLayout,但似乎不起作用

这是迄今为止我的(初学者)代码:

public class RegionPrompt extends JPanel {

    public RegionPrompt () throws IOException {
        JFrame frame = new JFrame("Map");
        GridBagConstraints gbc = new GridBagConstraints();
        JPanel pane = new JPanel() { 
            URL image2 = getClass().getResource("map.jpg");
            BufferedImage image = ImageIO.read(image2);
            public void paintComponent(Graphics g) {
                super.paintComponent(g);
                g.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), this);    
            }
        };

        frame.setContentPane(pane);
        JPanel pane2 = new JPanel();
        pane2.setOpaque(false);
        pane2.setSize(DefaultGUI.defaultSize);
        pane2.setLayout(new GridBagLayout());

        JButton c = new JButton("Map Location");
        //gbc.gridx = 0;
        //gbc.gridy = 0;
        c.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent e) {
               JOptionPane.showMessageDialog(null, "Location information", JOptionPane.INFORMATION_MESSAGE);
           }
        });
        pane2.add(c,gbc);

        frame.add(pane2);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(653, 448);
        frame.setVisible(true);
    }
}

非常感谢您的帮助(以及对这段代码的原谅)

你将会有一段艰难的时间,因为决定如何布局一个组件需要很多信息,而这些信息可能会在不同的平台之间发生变化。在您的情况下,我几乎认为生成一个自定义布局会更容易,您可以使用它来支持您的需求。非常感谢您,我会去查找它。以最小的大小提供ASCII艺术或GUI预期布局的简单绘图,如果可以调整大小,则具有更大的宽度和高度。