Java 如何从JFrame的中心元素显示不同的页面(已设置为BorderLayout) CentreFrameController
守则这部分的目的是:Java 如何从JFrame的中心元素显示不同的页面(已设置为BorderLayout) CentreFrameController,java,swing,layout-manager,Java,Swing,Layout Manager,守则这部分的目的是: 我想让GuiController框架在所有页面上都具有我的应用程序的一些通用样式(不管任何活动) GuiController框架将BorderLayout的中心元素样式提供给CentreFrameController面板 现在,CentreFrameController应该在听到LoginListener后切换页面。但是在这里,当它听到来自LoginListener的消息时,它并没有将CustomerPage添加到它的布局中(请注意,这里,CustomerPage类是为了扩
GuiController
框架在所有页面上都具有我的应用程序的一些通用样式(不管任何活动)GuiController
框架将BorderLayout
的中心元素样式提供给CentreFrameController
面板CentreFrameController
应该在听到LoginListener
后切换页面。但是在这里,当它听到来自LoginListener
的消息时,它并没有将CustomerPage
添加到它的布局中(请注意,这里,CustomerPage
类是为了扩展JPanel
,我没有上传它,因为它不是真正需要的)CardLayout
:
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
}
}
您可以使用carddlayout
控制显示哪张卡
以下是一个演示如何使用Andrew Thompson建议的
CardLayout
:
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
}
}
您可以使用carddlayout
控制显示哪张卡
“请在我的代码中做出适当的更改以回复…”因此这不是一项编码服务。2)“我没有上传,因为它不是真正必要的”为了更快地获得更好的帮助,请发布或。3) “如何显示与JFrame的中心元素不同的页面”使用如中所示的。将其设置为添加到
边界布局
的中心
约束的面板。4) 请对代码和代码片段、结构化文档(如HTML/XML或输入/输出)使用代码格式。。。。要做到这一点,请选择文本并单击邮件发布/编辑表单顶部的{}
按钮。@AndrewThompson你把我搞错了。.在中,我看到了很多答案,告诉我应该更改代码的哪一部分…所以我说“告诉代码的哪一部分应该更改”,这与“在我的代码中进行适当的更改”。“请通过在我的代码中进行适当的更改来回复…”这不是一项编码服务。2)“我没有上传,因为它不是真正必要的”为了更快地获得更好的帮助,发布一个或。3)“如何显示与JFrame中心元素不同的页面“使用如中所示的。将其设置为添加到边界布局
的中心
约束的面板。4) 请对代码和代码片段、结构化文档(如HTML/XML或输入/输出)使用代码格式。。。。要做到这一点,请选择文本并单击邮件发布/编辑表单顶部的{}
按钮。@AndrewThompson你把我搞错了。.在中,我看到了很多答案,告诉我应该更改代码的哪一部分…所以我说“告诉代码的哪一部分应该更改”,这与“在我的代码中进行适当的更改”。非常感谢,非常感谢
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);
}
}