在JPanel中将按钮放在图像顶部?

时间:2013-03-12 17:43:13

标签: java swing user-interface layout jpanel

我一直在主菜单屏幕上工作。我使用卡片布局,因为我有一个在主菜单屏幕之前显示的启动画面。一旦用户点击初始屏幕上的“继续”按钮,它们就会进入主菜单屏幕。

我无法添加屏幕截图,因为我没有足够高的声誉,但截至目前按钮被推到一边,我认为是因为卡布局。

有没有办法可以将按钮放在主菜单屏幕图像的顶部?

这是我的窗口代码:

package edu.ycp.cs.Main;

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JPanel;

public class Window {
    JPanel cards; // a panel that uses CardLayout
    final static String SPLASHSCREEN = "SplashScreen";
    final static String MAINMENU = "MainMenu";

    public void addComponentToWindow(Container pane) {
        // Put the JComboBox in a JPanel to get a nicer look.
        JPanel gameWindow = new JPanel(); // use FlowLayout

        // Create the "cards".
        JPanel card1 = new JPanel();
        JButton continueButton = new JButton("Continue");
        continueButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                CardLayout cl = (CardLayout) (cards.getLayout());
                cl.show(cards, MAINMENU);
            }
        });
        card1.add(new SplashScreen());
        card1.add(continueButton);

        JPanel card2 = new JPanel();
        JButton menuButton1 = new JButton("PLAY!");
        JButton menuButton2 = new JButton("HIGH SCORES");
        card2.add(new MainMenuScreen());
        card2.add(menuButton1);
        card2.add(menuButton2);

        cards = new JPanel(new CardLayout());
        cards.add(card1, SPLASHSCREEN);
        cards.add(card2, MAINMENU);

        pane.add(gameWindow, BorderLayout.PAGE_START);
        pane.add(cards, BorderLayout.CENTER);
    }
}

有关如何将按钮放在图像顶部的任何建议吗?

3 个答案:

答案 0 :(得分:1)

JPanel card1 = new JPanel();
card1.add(new SplashScreen());
card1.add(continueButton);

JPanel使用FlowLayout。因此,当您向其添加两个组件时,它们只是彼此相邻。

您希望将组件绘制在彼此之上,因此您需要执行以下操作:

JPanel card1 = new JPanel();
SplashScreen splash = new SplashScreen();
splash.setLayout( new FlowLayout() );
card1. add(splash);
splash.add( continueButton );

答案 1 :(得分:0)

包含2 JPanelmenuButton的{​​{1}}没有布局。使用MenuScreen之类的设置并将按钮设置在顶部。您可以使用其他布局,这取决于您。

我仅使用按钮向您显示GridBagLayout的简单示例,并建议您检查Oracle's page on that layout是否要使用它。

GridBagLayout

答案 2 :(得分:0)

如果您的启动画面只有一个按钮,您可以尝试将整个启动图像设为按钮,如下例所示:Java: using an image as a button

您可以编辑现有的初始屏幕图像,在图像内添加一个继续按钮。当然,用户可以在任何地方点击(因为它将是一个巨大的图像按钮)。

听起来很俗气,我知道。但这可能是一种快速而肮脏的方式,可以达到你想要的效果。