Java JButton在一个面板中显示,但在另一个面板中不显示

图尔兹

我正在为人造销售系统构建一个非常基本的GUI,并且试图显示两个屏幕(“销售”和“主页”),两个屏幕都带有可以转到另一个jpanel的按钮,而且两个屏幕上都带有“ Quit”按钮关闭应用程序。

我正在使用以下代码,我想我可以对其他按钮使用与“退出”按钮相同的代码,但是“退出”仅显示在“销售”页面上,而不显示在主页上。

import java.awt.Font;
import java.awt.event.*;
import javax.swing.*;

public class PHPSRSFrame implements ActionListener
{
    public static final int WIDTH = 800;
    public static final int HEIGHT = 600;
    public static final int BUTTON_WIDTH = 115;
    public static final int BUTTON_HEIGHT = 30;
    public static final int HEADING_WIDTH = 350;
    public static final int HEADING_HEIGHT = 35;

    private JFrame frame;
    private JPanel homePanel, salesPanel;
    private JButton salesButton, homeButton, quitButton;

    public PHPSRSFrame()
    {
        // Create the frame for the program
        frame = new JFrame("PHP Sales Reporting System");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Create each panel (page), use null layout for absolute locations
        homePanel = new JPanel();
        homePanel.setLayout(null);
        salesPanel = new JPanel();
        salesPanel.setLayout(null);

        // Create Homepage heading
        JLabel lblPhpSalesReporting = new JLabel("Welcome");
        lblPhpSalesReporting.setFont(new Font("Arial Black", Font.BOLD, 24));
        lblPhpSalesReporting.setBounds(WIDTH/2-HEADING_WIDTH/2, 50, HEADING_WIDTH, HEADING_HEIGHT);

        // Create Sales heading
        JLabel lblSales = new JLabel("Sales");
        lblSales.setFont(new Font("Arial Black", Font.BOLD, 24));
        lblSales.setBounds(WIDTH/2-100/2, 50, 100, HEADING_HEIGHT);

        // Create button to go to sales screen
        salesButton = new JButton("Sales");
        salesButton.setBounds(WIDTH/2-BUTTON_WIDTH/2, 150, BUTTON_WIDTH, BUTTON_HEIGHT);
        salesButton.addActionListener(this);

        // Create button to return to home screen
        homeButton = new JButton("Home");
        homeButton.setBounds(20, 20, BUTTON_WIDTH, BUTTON_HEIGHT);
        homeButton.addActionListener(this);

        // Create button to quit the whole program
        quitButton = new JButton("Quit");
        quitButton.setBounds(650, 500, BUTTON_WIDTH, BUTTON_HEIGHT);
        quitButton.addActionListener(this);

        // Add components to Homepage
        homePanel.add(lblPhpSalesReporting);
        homePanel.add(salesButton);
        homePanel.add(quitButton);

        // Add components to Sales page
        salesPanel.add(homeButton);
        salesPanel.add(lblSales);
        salesPanel.add(quitButton);

        frame.setContentPane(homePanel);
        frame.setSize(WIDTH, HEIGHT);
        frame.setVisible(true);
    }


    public void actionPerformed(ActionEvent ae)
    {
        JButton button = (JButton) ae.getSource();
        // Go to sales page
        if (button == salesButton)
        {   
            frame.remove(homePanel);
            frame.setContentPane(salesPanel);
        }
        // Go to homepage
        else if (button  == homeButton)
        {
            frame.remove(salesPanel);
            frame.setContentPane(homePanel);
        }
    // Quit the application
    else if (button == quitButton) {
        System.exit(0);
    }
    // Redo the frame
    frame.revalidate();
    frame.repaint();
}   

    public static void main(String[] args)
    {   
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new PHPSRSFrame();
            }
        });
    }
}

有人可以告诉我我所缺少/做错了什么导致“主页”按钮仅出现在销售页面上吗?

谢谢。

北极领主

您根本无法将相同的内容添加JButton到两个不同的父容器。这将导致仅使最后一个添加调用有效。您需要创建两个可以共享同一ActionListener的不同JButton。

或者,在切换时,JPanels您可以从消失的按钮上删除按钮并将其添加到出现的框架中。

homePanel.add(quitButton);  // add to home panel
[...]
//salesPanel.add(quitButton); // don't add to sales panel
[...]
public void actionPerformed(ActionEvent ae){
    [...]
    if (button == salesButton)
    {   
        homePanel.remove(quitButton);
        salesPanel.add(quitButton);
        [...]
    }
    else if (button  == homeButton)
    {
        salesPanel.remove(quitButton);
        homePanel.add(quitButton);
        [...]
    }
    [...]
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在NetBean Java中的jframe中存在的另一个面板中的其他面板上单击按钮时显示面板

Java Swing-如何在另一个面板之上显示一个面板?

如何使用java中另一个类的另一个面板更改面板的内容

显示Java中另一个方法的数组

当另一个面板正在动态移动Java swing时,如何自动正确调整面板的大小

Java GUI 为什么 BoxLayout 面板在有另一个 BoxLayout 面板时表现奇怪

Java Swing:访问另一个类的面板组件

突出显示JTextArea中的下一个/上一个匹配项的JButton JAVA SWING

如何使用方法调用在另一个面板中显示特定面板?

尝试在另一个活动“ java.lang.IndexOutOfBoundsException:索引:0,大小:0”中显示详细信息

从另一个Java文件中的一个文件扩展Java类

Java-从另一个类中调用变量,该类的值在按下JButton时从JTextField中获取

Java继承中的另一个问题?

从eclipse中的另一个java项目导入

JAVA 中的另一个条件

从Java中的另一个类访问变量

Java 中 RegEx 的另一个问题

从Java中的另一个类获取数组

调用Java中的另一个类

从Java中的另一个类存储数组

从Java中的另一个类访问变量

从Java中的另一个对象获取空值,但在自己的类中获取值

一个函数等待Java中的另一个函数

如何使一个Java类仅对包中的另一个类可用

如何在另一个Map Java中迭代一个Map

如何在Java中从另一个调用一个构造函数?

在Java中从另一个调用一个构造函数

将一个列表添加到Java中的另一个列表?

从Java中的另一个函数锁定一个函数