1

現在、作成中のゲームの GUI を作成しようとしていますが、問題が発生し始めています。なんらかの理由で、メイン ボードのタイマーの背景を青に変更し、gameGUI の背景を緑に変更することができません。これは初めてのスイングでのプログラミングなので、これらすべてに慣れていません。

また、レイヤードペインの使用法が正しいかどうかも疑問に思っています。ボードは、いつでもその上に画像を配置できるように、レイヤード ペインにする必要があります。タイマーは太陽が上にある空になり、雲はある時点でその上を覆います。

あなたが私にヒントを与え、道に沿って私を助けてくれれば、あちこちでいくつかの小さなことを修正するだけでも素晴らしいでしょう.

ありがとうございました。

public class gameGUI extends JPanel{

    private ArrayList<BufferedImage> nativeOne = new ArrayList<BufferedImage>();
    private ArrayList<BufferedImage> nativeTwo = new ArrayList<BufferedImage>();
    private ArrayList<BufferedImage> nativeThree = new ArrayList<BufferedImage>();
    private ArrayList<BufferedImage> exoticOne = new ArrayList<BufferedImage>();
    private ArrayList<BufferedImage> exoticTwo = new ArrayList<BufferedImage>();
    private ArrayList<BufferedImage> exoticThree = new ArrayList<BufferedImage>();

    private static int screenWidth = 680;
    private static int screenHeight = 680;

    private JLayeredPane layeredPane;

    public gameGUI(){        
        layeredPane = new JLayeredPane();
        layeredPane.setPreferredSize(new Dimension(680, 680));
        layeredPane.setBackground(Color.GREEN);
        layeredPane.setBorder(BorderFactory.createLineBorder(Color.BLACK,2));        
    }

    private static JLayeredPane timer(){
        JLayeredPane timer = new JLayeredPane();
        timer.setPreferredSize(new Dimension(800,120));
        timer.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));
        timer.setBackground(Color.BLUE);
        return timer;
    }

    private static JPanel sideBar(){
        //Create the side bar and add buttons
        JPanel returnMofo = new JPanel();
        JButton nativeOne = new JButton(native1);
        JButton nativeTwo = new JButton(native2);
        JButton nativeThree = new JButton(native3);
        JButton exoticOne = new JButton(exotic1);
        JButton exoticTwo = new JButton(exotic2);
        JButton exoticThree = new JButton(exotic3);
        returnMofo.setLayout(new GridLayout(6,1));
        returnMofo.setPreferredSize(new Dimension(120, 680));
        returnMofo.setBorder(BorderFactory.createLineBorder (Color.BLACK, 2));
        returnMofo.add(nativeOne);
        returnMofo.add(nativeTwo);
        returnMofo.add(nativeThree);
        returnMofo.add(exoticOne);
        returnMofo.add(exoticTwo);
        returnMofo.add(exoticThree);
        return returnMofo;
    }


    private static void createAndShowGUI(){
        JFrame frame = new JFrame();
        frame.setTitle("Storm Watch");
        frame.setSize(800, 800);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gameGUI gui = new gameGUI();
        frame.add(timer(), BorderLayout.NORTH);
        frame.add(sideBar(), BorderLayout.WEST);
        frame.add(gui, BorderLayout.EAST);                        

        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args){    
        createAndShowGUI();    
    }                
}
4

2 に答える 2

3

とを に設定layeredPanetimerてくださいopaque

例えば...

layeredPane.setOpaque(true);

layeredPaneまた、メインボードに追加することもできます...

public TestGameBoard() {
    layeredPane = new JLayeredPane();
    layeredPane.setPreferredSize(new Dimension(680, 680));
    layeredPane.setBackground(Color.GREEN);
    layeredPane.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));
    layeredPane.setOpaque(true);

    setLayout(new BorderLayout()); // Easy to use layout manager
    add(layeredPane); // Now I'm visible ;)
}

そして、私があなたの注意を払っている間、常にイベントディスパッチスレッドのコンテキスト内から UI を作成/操作する必要があります...

public static void main(String[] args) {

    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            createAndShowGUI();
        }
    });

}
于 2012-11-08T21:15:59.347 に答える
1

2 つの問題。まず、JLayeredPane を使用するときに setOpaque(true) を使用して背景色を表示する必要があります。

layeredPane.setBackground(Color.GREEN);
layeredPane.setOpaque(true);

...

timer.setBackground(Color.BLUE);
timer.setOpaque(true);

次に、gameGUI の layeredPane の代わりに gameGUI をフレームに追加します。次のようにする必要があります。

frame.add(gui.layeredPane, BorderLayout.EAST);
于 2012-11-08T21:20:41.303 に答える