将按钮放在图像顶部

时间:2014-06-18 00:23:36

标签: java image swing jbutton jlabel

我又回来了。我想知道如何在GUI中的图像顶部放置一个按钮。这是我目前的代码:

    private static JPanel titlePanel = new JPanel();
    private static JLabel titleScreen = new JLabel();
    private static JLabel titleScreenBackground = new JLabel();
    private static JButton startGameButton = new JButton("START GAME");
    private static ImageIcon titleScreenPic = new ImageIcon("http://icdn6.digitaltrends.com/image/battleship-650x0.jpg");
    private static JFrame frame=new JFrame(); //creates frame

    public static void main(String[] args) throws MalformedURLException{
            titleScreen();
    }

    public static void titleScreen() throws IOException{

        titleScreen.setLayout(new GridBagLayout());
        titlePanel.setLayout(new GridBagLayout());

        GridBagConstraints c1 = new GridBagConstraints();
        c1.gridx = 0;
        c1.gridy = 0;
        c1.anchor = GridBagConstraints.PAGE_END;

        titleScreenBackground.setIcon(titleScreenPic);

        titlePanel.add(startGameButton);

        titlePanel.setAlignmentY(SwingConstants.BOTTOM);
        frame.add(titleScreenBackground);
        frame.add(titlePanel);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(630, 300); //sets appropriate size for frame
        frame.setVisible(true); //makes frame visible
    }

我尝试将面板设置为gridbaglayout,这样我就可以将组件放在同一个单元格中,但它仍然将图像放在第一位,然后将按钮放在它旁边。

编辑:我重做了代码,让它做了我想要的。如您所见,我尝试设置按钮位置的行对按钮没有任何作用。

2 个答案:

答案 0 :(得分:4)

  

如何在GUI中的图像顶部放置按钮。

如果您想在图像上放置一个Swing按钮,则需要执行两个步骤。

  1. 为包含图像的标签设置布局管理器。

  2. 将按钮添加到标签(而不是面板)。

  3. 有关更多信息和示例,请参阅Background Panel

    编辑:

    要使组件居中,最简单的方法是:

    label.setLayout( new GridBagLayout() );
    label.add(button, new GridBagConstraints());
    

答案 1 :(得分:-1)

如果想要图像上的按钮,可以在JPanel的paint方法中使用图像。 示例(使用资源im

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestFrame extends JFrame {

BackgroundPane bgPane;

private JButton startButton;

public TestFrame() {
    super();
    initComponents();
}

private void initComponents() {

    try {

        URL url = getClass().getResource("battleship-650x0.jpg");
        BufferedImage image = ImageIO.read(url);

        bgPane = new BackgroundPane(image);
        bgPane.setLayout(new GridBagLayout());
        startButton = new JButton("Start");
        bgPane.add(startButton);
        setContentPane(bgPane);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();

    } catch (Exception e) {
        e.printStackTrace();
    }

}

/**
 * @param args
 */
public static void main(String[] args) {
    TestFrame frame = new TestFrame();
    frame.setVisible(true);
}

class BackgroundPane extends JPanel {
    Image image;

    public BackgroundPane(Image backGroundImage) {
        super();
        image = backGroundImage;
        setPreferredSize(new Dimension(image.getWidth(this), image.getHeight(this)));
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, null);

    }

}
}