gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:19:12 25 4
gpt4 key购买 nike

我正在为一个虚假的销售系统构建一个非常基本的 GUI,我正在尝试显示两个屏幕(“销售”和“主页”),它们都带有转到另一个 jpanel 的按钮,但也带有“退出”按钮关闭应用程序。

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

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);
[...]
}
[...]
}

关于Java JButton 显示在一个面板中,但不显示在另一个面板中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36217408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com