0

メインメニュー画面で作業しています。メインメニュー画面の前にスプラッシュ画面が表示されるので、カードレイアウトを使用します。ユーザーがスプラッシュ画面の[続行]ボタンをクリックすると、メインメニュー画面が表示されます。

評判が悪いのでスクリーンショットを追加できませんが、今のところボタンが横に押し出されているので、カードのレイアウトが原因だと思います。

メインメニュー画面の画像の上にボタンを配置する方法はありますか?

これがウィンドウの私のコードです:

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

画像の上にボタンを表示する方法について何か提案はありますか?

4

3 に答える 3

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

JPanel は FlowLayout を使用します。したがって、2 つのコンポーネントを追加すると、それらは互いに隣り合ってペイントされます。

コンポーネントを重ねてペイントする必要があるため、次のようにする必要があります。

JPanel card1 = new JPanel();
SplashScreen splash = new SplashScreen();
splash.setLayout( new FlowLayout() );
card1. add(splash);
splash.add( continueButton );
于 2013-03-12T18:59:05.647 に答える
0

スプラッシュ画面にボタンが1つしかない場合は、次の例のように、スプラッシュ画像全体をボタンにしてみてください。Java:画像をボタンとして使用する

既存のスプラッシュ画面画像を編集して、画像自体の中に続行ボタンを追加することができます。もちろん、ユーザーはどこでもクリックできます(1つの巨大な画像ボタンになるため)。

安っぽく聞こえます、私は知っています。しかし、それはあなたが望むものに十分に近づくための迅速で汚い方法かもしれません。

于 2013-03-13T08:50:19.680 に答える
0

あなたの 2をJPanel含み、レイアウトを持っていません。1つのようなものを使用して、ボタンを上に設定します. 別のレイアウトを使用することもできますが、それはあなた次第です。menuButtonMenuScreenGridBagLayout

ボタンは簡単な例を示すためだけに使用しました。使用したい場合は、そのレイアウトに関する Oracle のページGridBagLayoutを確認することをお勧めします。

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

JButton menuButton3 = new JButton("UNDER THE 2 OTHERS");

GridBagConstraints gbc2 = new GridBagConstraints();
gbc2.gridx = 0;
gbc2.gridy = 1;
gbc2.weightx = 1;
gbc2.weighty = 1;
gbc2.gridwidth = 2;
gbc2.fill = GridBagConstraints.HORIZONTAL;

GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;

GridBagConstraints gbc3 = new GridBagConstraints();
gbc3.gridx = 1;
gbc3.gridy = 0;
gbc3.weightx = 1;
gbc3.weighty = 1;
gbc3.fill = GridBagConstraints.HORIZONTAL;
card2.add(menuButton1, gbc);
card2.add(menuButton2, gbc3);
card2.add(menuButton3, gbc2);
于 2013-03-12T18:58:30.897 に答える