0

我一直在尝试创建一个类来决定在 JFrame 上打印哪个 JPanel。JPanel 是“addNew”和“searchPanel”。addNew 由一个名为“AddNew”的类创建,它包含使用户能够将新内容添加到数据库中的内容项。searchPanel 面板位于不同的类“SearchPanel”中,它允许用户在数据库中搜索内容。

绘制两个 JPanel 的 JFrame 在其自己的类中,并且只有两个按钮“添加新项目”和“搜索”。在单击这些按钮之一之前,不会绘制任何 JPanel。

还有第三个类,它根据“buttonClick”上传递的值(1或2)确定通过switch语句在JFrame上绘制哪个JPanel,我认为这是我遇到问题的地方。

到目前为止我的代码:

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);
    }
}
4

1 回答 1

0

首先,根据请求初始化模块不是一个好习惯。

换句话说,您应该有一个在主类构造函数中调用的方法,该方法将为变量分配空间并进行计算,因此当您实际单击该按钮时,您正在运行的唯一命令是创建每个面板的命令可见的。

这很可能是您正在做的事情不起作用的原因。

所以只需让代码最初加载两个面板,然后当单击按钮时,执行 show() 或 hide() (我相信这些是方法,但我不经常使用 Swing 足以知道,所以措辞可能是不同的)。

于 2013-08-09T16:10:49.863 回答