我一直在尝试创建一个类来决定在JFrame上打印哪个JPanel。 JPanels是" addNew"和" searchPanel"。 addNew由一个名为" AddNew"的类创建。它包含允许用户将新内容添加到数据库中的内容项。 searchPanel面板位于不同的类别中,#Search; #Panel"这使用户能够搜索数据库中的内容。
绘制两个JPanel的JFrame在它自己的类中,只有两个按钮"添加新项目"和"搜索"。在单击其中一个按钮之前,不会绘制JPanel。
Theres是第三个类,通过switch语句确定哪个JPanel在JFrame上绘制,取决于传递的值(1或2)" buttonClick",这是我认为我在哪里遇到问题。
到目前为止我的代码:
import Panels.AddNew;
import SearchWakili.SearchPanel;
import javax.swing.JPanel;
public class Redirect {
public static JPanel panelRedirect = new JPanel();
public static JPanel value;
public static JPanel pageAddNewFunction () {
AddNew addNew = new AddNew();
panelRedirect.add(addNew);
return panelRedirect;
}
public static JPanel SearchPanelFunction () {
SearchPanel searchPanel = new SearchPanel();
panelRedirect.add(searchPanel);
return panelRedirect;
}
public static JPanel pageRedirect (int pageID) {
switch (pageID) {
case 1:
value = pageAddNewFunction();
break;
case 2:
value = SearchPanelFunction();
break;
}
return value;
}
}
代码什么也没做。但是,我没有收到任何代码错误消息。当我直接呼叫时,JPanels打印正常,而不通过"重定向"重定向。类。 我做错了什么,有没有其他方法我可以使用一个独立的类来决定根据点击的按钮绘制JPanel?
非常感谢你。
哦!而且我不想使用CardLayout。我想学习如何自己编写代码。
绘制JFrame的部分代码:
import java.awt.Color;
import java.lang.ProcessBuilder.Redirect;
import javax.swing.JFrame;
public class FrameContainer {
public static JFrame Home;
public static void createAndShowGUI() {
// Create and set up the Frame
JFrame.setDefaultLookAndFeelDecorated(true);
Home = new JFrame();
Home.setUndecorated(true);
Home.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
Home.setResizable(false);
Home.setBounds(0, 0, 400, 400);
Home.setBackground(Color.gray);
// Redirect redirect = new Redirect();
Home.add(Redirect.panelRedirect);
// Display the window
Home.pack();
Home.setVisible(true);
}
}
声明事件的代码的一部分:
public class Home {
// The method that calls the type of JPanel (1) to be drawn
private void mouseClickedAddNew(java.awt.event.MouseEvent evt) {
// FrameContainer.createAndShowGUI();
Redirect.pageRedirect(1);
}
}
答案 0 :(得分:0)
首先,根据请求初始化模块不是一个好习惯。
换句话说,您应该有一个在主类构造函数中调用的方法,它将为变量分配空间并进行计算,因此当您实际单击该按钮时,您运行的唯一命令就是那个使每个面板可见。
这很可能是为什么你所做的不起作用。
所以只需让代码最初加载两个面板,然后当单击一个按钮时,执行show()或hide()(我相信这些是方法,但我不经常使用Swing知道,所以措辞可能不同。)