我需要寫一個簡單的網球比賽。 在不同的窗口之間移動(面板與主菜單,面板與遊戲,面板與設置)我決定使用內部類擴展JPanel並將其替換爲start new game
之類的事件時發生。jpanel as inner class
但問題是 - 它沒有看到我的內心階層。我的意思是我把它添加到JFrame
mainframe.add(new MainMenuPanel());
但是當我運行程序時屏幕上沒有任何東西。有什麼問題?
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class MainFrame{
JFrame mainframe;
public static void main(String[] args){
new MainFrame();
}
public MainFrame() {
mainframe = new JFrame();
mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainframe.setSize(300, 400);
mainframe.setTitle("X-Tennis v0.1");
mainframe.add(new MainMenuPanel());
mainframe.getContentPane().setLayout(new GridLayout());
mainframe.getContentPane().setBackground(Color.WHITE);
mainframe.setVisible(true);
}
public class MainMenuPanel extends JPanel {
JPanel mainmenupanel;
JLabel label1;
JButton btnNewGame,btnJoinGame;
ImageIcon iconNewGame,iconJoinGame;
public MainMenuPanel(){
mainmenupanel = new JPanel();
label1 = new JLabel("X-TENNIS");
label1.setFont(new Font("Comic Sans MS",Font.ITALIC,20));
label1.setForeground(Color.BLUE);
btnNewGame = new JButton("New Game", iconNewGame);
btnNewGame.setFocusPainted(false);
btnNewGame.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e){
JOptionPane.showMessageDialog(mainframe, "New game");
//delete current panel and add another to mainframe
}
}
);
btnNewGame.setPreferredSize(new Dimension(140,30));
btnJoinGame = new JButton("Join game",iconJoinGame);
mainmenupanel.add(label1);
mainmenupanel.add(btnNewGame);
}
}
}
添加(和其他一些JFrame的方法)會自動重定向到內容窗格,您的下半部分答案實際上是正確的 – MadProgrammer 2013-02-08 19:50:06
確實!在這種情況之前,我主要使用Swing。我認爲這個重定向已經在1.5中添加了,對吧? – 2013-02-08 19:55:17
@cyrillie是的,類似的東西 – MadProgrammer 2013-02-08 19:56:42