我正在制作一個應用程式或(something.exe)。我想創建一個類作為我的主要框架。那是因為我不想為我將要創建的每個類創建新框架。我希望我的班級MainMenu擁有MainFrame可以放置按鈕等的框架。
package ThinkNotOfficial;
public class Main {
public static void main(String[] args) {
MainFrame mainFrame = new MainFrame();
}
}
package ThinkNotOfficial;
import javax.swing.*;
import java.awt.*;
public class MainFrame extends JFrame{
// Global Variables
JFrame mainFrame = new JFrame("Base Frame (global)");
ImageIcon logo = new ImageIcon("Logo.png");
MainFrame (){
mainFrame.setSize(500, 500);
mainFrame.setResizable(false);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setIconImage(logo.getImage());
mainFrame.getContentPane().setBackground(new Color(255,255,255));
mainFrame.setLocationRelativeTo(null);
mainFrame.setLayout(null);
mainFrame.setVisible(true);
// ------------ PROGRAM FIELD -----------
}
}
package ThinkNotOfficial;
import javax.swing.*;
public class MainMenu{
// ------------ Global Variables ------------
JButton play = new JButton("PLAY");
MainMenu(){
// ------------ PLAY button ------------
play.setSize(100,50);
// ------------ Adding parts ------------
}
}
uj5u.com熱心網友回復:
利用
- 模型-視圖-控制器
- 依賴注入(即向方法或建構式傳遞資訊)
- 觀察者模式
您還可以利用CardLayout幫助促進不同視圖之間的切換,例如
import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.add(new MainPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class MainPane extends JPanel {
private CardLayout cardLayout;
private MenuPane menuPane;
private GamePane gamePane;
public MainPane() {
cardLayout = new CardLayout();
setLayout(cardLayout);
menuPane = new MenuPane(new MenuPane.Observer() {
@Override
public void didStartGame(MenuPane source) {
cardLayout.show(MainPane.this, "game");
}
});
gamePane = new GamePane(new GamePane.Observer() {
@Override
public void gameDidEnd(GamePane source, int score) {
cardLayout.show(MainPane.this, "menu");
}
});
add(menuPane, "menu");
add(gamePane, "game");
}
}
public class MenuPane extends JPanel {
public interface Observer {
public void didStartGame(MenuPane source);
}
public MenuPane(Observer observer) {
setLayout(new GridBagLayout());
JPanel contentPane = new JPanel(new GridLayout(-1, 1));
JButton startButton = new JButton("Start");
startButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
observer.didStartGame(MenuPane.this);
}
});
contentPane.add(startButton);
add(contentPane);
}
}
public class GamePane extends JPanel {
public interface Observer {
public void gameDidEnd(GamePane source, int score);
}
public GamePane(Observer observer) {
setLayout(new GridBagLayout());
add(new JLabel("All your game is belong to us"));
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
}
JTabbedPane也是允許用戶在不同視圖之間切換的好方法,有關更多詳細資訊,請參閱如何使用選項卡式窗格
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/386983.html
