2012-02-25 26 views
4

我正在开发一个摆动应用程序。我有两个屏幕,从屏幕截图1摆动,多屏幕,控制转移

1.A按钮将启动屏幕2.

伪代码:

ScreenA extends JFrame{ 

    onButtonClick(){ 
     Screen2.setVisible(true); 
    } 
    System.out.println("Hai"); 
} 

Screen2 extends JFrame{ 
    onButtonClick{ 
     Hide this screen; 
    } 
} 

现在输出的是:

  1. 屏幕2将显示 2.Hai将被打印。

我的目标是:只有当屏幕2上的一个按钮被点击并且屏幕2消失时,我才会显示hai。

我该如何实现它?

我试图设置一个标志按钮在屏幕上的两个按钮。 但程序只是通过条件并继续到下一行。 我如何保持控制?

+0

从你问的解决方案是在隐藏后在Screen2.onButtonClick()中打印“Hai”。如果这是错误的阐述你的问题。 – 2012-02-25 11:02:49

+0

不是。目标是将完全控制权转移到可见屏幕上,并从控制权转移之时继续执行。 – Achilles 2012-02-25 11:06:45

回答

4

希望这段代码中的评论能帮助你解释一些事情。

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

public class TwoFrames 
{ 
    // Making our first JFrame. 
    JFrame frame1 = new JFrame("FRAME 1"); 
    // Declaring our second JFrame. 
    JFrame frame2 ; 

    public void createAndDisplayGUI() 
    {    
     // Used to close the JFrame graciously. 
     frame1.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);  

     // Used to position the JFrame at the middle of the screen. 
     //frame1.setLocationRelativeTo(null);  

     // Use this instead for placing windows, as determined by the OS. 
     frame1.setLocationByPlatform(true);  

     // Calling this method to create our frame2. 
     makeNewFrame(); 

     // Button to show the second JFrame. 
     JButton showButton = new JButton("SHOW NEW FRAME"); 
     showButton.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent ae) 
      { 
       // Checking if the frame2 is already visible 
       // on the screen, if YES then we won't 
       // create a new frame, else a new frame 
       // will be created. This will prevent multiple 
       // JFrame to be created at the click of this button.     
       if (!(frame2.isShowing())) 
       { 
        // If you had already disposed it previously 
        // by clicking the hide Button on the other frame 
        // then the click on this button will recreate 
        // a new frame to be displayed. 
        makeNewFrame(); 
        frame2.setVisible(true); 
       } 
      } 
     }); 

     // Adding the button to the South side of the frame1. 
     frame1.add(showButton, BorderLayout.PAGE_END); 
     frame1.pack(); 
     frame1.setVisible(true); 
    } 

    private void makeNewFrame() 
    {  
     frame2 = new JFrame("FRAME 2"); 
     frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame2.setLocationByPlatform(true); 

     // Creating a JButton to be shown on the JFrame. 
     JButton hideButton = new JButton("HIDE FRAME"); 
     hideButton.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent ae) 
      { 
       // On the click of this button, frame2 will 
       // disappear and HAI will be displayed on the console. 
       frame2.dispose(); 
       System.out.println("HAI"); 
      } 
     }); 

     // Adding the button to the South side of the frame1. 
     frame2.add(hideButton, BorderLayout.PAGE_END); 
     frame2.pack(); 
    } 

    public static void main(String... args) 
    { 
     /* Here we are Secheduling a JOB for 
     * Event Dispatcher Thread, since Swing 
     * is not Thread Safe. This is used to place 
     * the code which is responsible for 
     * creating and diaplaying your GUI. 
     */ 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       TwoFrames tf = new TwoFrames(); 
       tf.createAndDisplayGUI(); 
      } 
     }); 
    } 
} 
+1

尽管我不喜欢这种方法(2帧)和所有大写字符串,但只是为评论投票。 :)请注意,第二个评论应该是// //声明我们的第二个JFrame. – 2012-08-12 06:07:30

+0

@AndrewThompson:Ahha,thankx指出,很好的捕获:-)我愚蠢的使用那个地方的评论:-) – 2012-08-12 06:31:18