import java.awt.BorderLayout;
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.border.Border;
public class GuiController extends JFrame {
private CentreFrameController centreFrameController;
private CustomerPage customerPage;
private LoginPage loginPage;
public GuiController(){
centreFrameController=new CentreFrameController(this);
setLayout(new BorderLayout());
add(centreFrameController,BorderLayout.CENTER);
setTitle("Courier System-Login Page");
setVisible(true);
setSize(550,650);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
CentreFrameController
import java.awt.BorderLayout;
import java.awt.Graphics;
import javax.swing.JPanel;
public class CentreFrameController extends JPanel {
private GuiController guiController;
private CustomerPage customerPage;
private LoginPage loginPage;
public CentreFrameController(GuiController guiController){
this.guiController=guiController;
loginPage=new LoginPage(this);
setLayout(new BorderLayout());
add(loginPage,BorderLayout.CENTER);
loginPage.addLoginPageListener(new LoginPageListener(){
public void getLoginPageReply(int reply) {
switch(reply){
case 0:System.out.println("Customer login sucess");
setCustomerHomePage();
break;
case 1:System.out.println("Admin login success");
}
}
});
}
public void setCustomerHomePage(){
customerPage=new CustomerPage(this,loginPage);
add(customerPage,BorderLayout.CENTER);///This is the part which is not working
}
}
这部分代码的目的是:
- 我想做
GuiController
框架在所有页面上都有一些适用于我的应用程序的通用样式(无论任何活动)
- The
GuiController
框架给出了中心元素样式BorderLayout
to the CentreFrameController
panel
- Now the
CentreFrameController
应该在收到消息后切换页面LoginListener
。但在这里,当它听到LoginListener
,它没有添加CustomerPage
到它的布局(请注意,这里,CustomerPage
类被扩展JPanel
我还没有上传它,因为它并不是真正必要的)。
这里有一个mcve演示如何使用CardLayout
正如安德鲁·汤普森所建议的:
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GuiController extends JFrame {
private boolean isRedShowing;
public GuiController(){
setTitle("CardLayout Demo");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
CentreFrameController centreFrameController = new CentreFrameController();
centreFrameController.showRedPane();
isRedShowing = true;
setLayout(new BorderLayout());
add(centreFrameController,BorderLayout.CENTER);
JButton toggle = new JButton("Toggle");
toggle.addActionListener(e ->{
if(! isRedShowing) {
centreFrameController.showRedPane();
} else {
centreFrameController.showYelloPane();
}
isRedShowing = ! isRedShowing;
});
add(toggle,BorderLayout.PAGE_END);
pack();
setVisible(true);
}
public static void main(String[] args) {
new GuiController();
}
}
class CentreFrameController extends JPanel {
public final String YELLOW_PAGE = "yellow page";
public final String RED_PAGE = "red page";
private final CardLayout cLayout;
public CentreFrameController(){
cLayout = new CardLayout();
setLayout(cLayout);
setPreferredSize(new Dimension(200, 150));
add(YELLOW_PAGE, new YellowPane());
add(RED_PAGE, new RedPane());
}
//two convenience methods that encapsulate CardLayout#show(Container, String)
void showRedPane() {
cLayout.show(this, RED_PAGE);
}
void showYelloPane() {
cLayout.show(this, YELLOW_PAGE);
}
}
class RedPane extends JPanel{
RedPane(){
setBackground(Color.RED);
}
}
class YellowPane extends JPanel{
YellowPane(){
setBackground(Color.YELLOW);
}
}
您可以使用以下命令控制显示哪张卡CarrdLayout
show.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)