java 按钮不显示_Java JButton显示在一个面板中,但不显示在另一个面板中

我正在为一个虚假的销售系统构建一个非常基本的GUI,我试图显示两个屏幕(“Sales”和“Home”),两个屏幕都带有按钮,可以转到另一个jpanel,还有两个“Quit”按钮关闭应用程序.

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

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.

或者在切换JPanel时,您可以从消失中移除按钮并将其添加到出现的帧中.

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

[...]

}

[...]

}

来源:https://www.icode9.com/content-1-290101.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值