2013-02-25 3 views
1

이것이 작동하지 않는 이유를 모르겠습니다. SplashScreen에서 Continue 버튼을 클릭하여 MainMenu 패널로 전환했는지 확인하기 위해 ItemListener를 구현했습니다. 코드를 실행하면 배경 이미지와 버튼이있는 첫 번째 패널이 표시되고 버튼을 클릭해도 아무 것도 발생하지 않습니다. 여기 JFrame에서 JPanels를 전환하는 방법

여기
package edu.ycp.cs.Main; 

import java.awt.BorderLayout; 
import java.awt.CardLayout; 
import java.awt.Container; 
import java.awt.event.ItemEvent; 
import java.awt.event.ItemListener; 

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

public class Window implements ItemListener{ 
private static final long serialVersionUID = 1L; 
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.addItemListener(this); 
    card1.add(new SplashScreen()); 
    card1.add(continueButton); 

    JPanel card2 = new JPanel(); 
    card2.add(new MainMenuScreen()); 

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

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

public void itemStateChanged(ItemEvent evt) { 
    CardLayout cl = (CardLayout) (cards.getLayout()); 
    cl.show(cards, (String) evt.getItem()); 
} 
} 

가 MAINMENU 코드가 정확히

package edu.ycp.cs.Main; 

import javax.imageio.ImageIO; 
import javax.swing.*; 

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.image.BufferedImage; 
import java.io.File; 

class SplashScreen extends JPanel { 
private static final long serialVersionUID = 1L; 

private BufferedImage background; 

public SplashScreen() { 
    try { 
     background = ImageIO.read(new File("Logo.png")); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

@Override 
public Dimension getPreferredSize() { 
    return new Dimension(800, 600); 
} 

@Override 
protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    if (background != null) { 
     int x = (getWidth() - background.getWidth()); 
     int y = (getHeight() - background.getHeight()); 
     g.drawImage(background, x, y, this); 
    } 

    Graphics2D g2d = (Graphics2D) g; 
    g2d.setPaint(Color.white); 
    g2d.drawString("Please wait...", getWidth()/2, getHeight() * 3/4); 
} 
} 

여기 내 홈페이지

package edu.ycp.cs.Main; 

import javax.swing.JFrame; 

public class Main { 
    public static void main(String[] args) { 
     //Schedule a job for the event dispatch thread: 
     //creating and showing this application's GUI. 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       makeGUI(); 
      } 
     }); 
    } 

private static void makeGUI() { 
    // Create and set up the window. 
    JFrame frame = new JFrame("M&M Arcade"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     // Create and set up the content pane. 
    Window window = new Window(); 
    window.addComponentToWindow(frame.getContentPane()); 

    // Display the window. 
    frame.pack(); 
    frame.setVisible(true); 
} 
} 
있는 다른 이미지 파일과 같은 내되는 SplashScreen 코드 입니다 내 창 클래스입니다

답변

1

ItemListener은 효과가 없습니다. 계속하려면 cc를 입력하십시오. JButton. ActionListener 대신 사용

continueButton.addActionListener(new ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     CardLayout cl = (CardLayout) (cards.getLayout()); 
     cl.show(cards, MAINMENU); 
    } 
}); 

또한 탐색 CardLayout#next을 사용하는 것이 좋습니다.

+0

완벽하게 작동했던 @Reimeus에 너무 감사드립니다. Swing 그래픽에 익숙해 져 있습니다. – mstep91

+0

내 단추를 내 이미지 위에 올려 놓는 방법에 대한 제안 사항 @ Reimeus? 현재로서는 이미지의 오른쪽으로 밀려났습니다. – mstep91

관련 문제