2016-03-25 90 views
4

我建立了一个虚假的销售体系一个非常基本的图形用户界面,我试图表现出两个屏幕(“销售”和“家”)都与按钮去其他jpanel,但也有一个“退出”按钮关闭应用程序。的Java的JButton显示在一个面板而不是其他

我使用下面的代码,我想我可以使用相同的代码为其他按钮,如用于但是“退出”按钮退出只显示了销售页面上,不上首页。

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

任何人能告诉我,我缺少的是什么/做错了,导致该家按钮,仅出现在销售页面上?

三江源。

回答

2

你根本无法添加相同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); 
     [...] 
    } 
    [...] 
} 
+0

三江源非常多。 我创建的每一页两种不同的退出按钮,现在按预期工作。 – Twulz

相关问题