打开新窗口Jframe Java

时间:2017-06-14 14:06:04

标签: java swing websocket

我有一个带有一个文本字段和一个按钮的jframe。 当我点击按钮时,我创建了一个websocket,我从中接收数据。 当数据到达时,我想隐藏这个Jframe并显示另一个Jframe。 出于这个原因,我这样做:

这是第一个JFrame

public class PrimaSchermata {

    private JFrame mainFrame;
    private JPanel controlPanel;
    private Session sessione;
    private JTextField userText;


    public PrimaSchermata(){

          mainFrame = new JFrame("First Jframe");
          mainFrame.setSize(500,200);
          mainFrame.setLayout(new GridLayout(3, 1));
          mainFrame.setResizable(false);

          controlPanel = new JPanel();
          controlPanel.setLayout(new GridBagLayout());

          this.showTextField();
          mainFrame.add(controlPanel);

          mainFrame.setVisible(true); 
    }
    private void showTextField(){

          JLabel  namelabel= new JLabel("Email: ", JLabel.RIGHT);

          this.userText = new JTextField(15);
          JButton loginButton = new JButton("Login");
          loginButton.addActionListener(new ActionListener() {

              public void actionPerformed(ActionEvent e) {     

                  PrimaSchermata.this.loginEvent(userText);

                }
          }); 


          controlPanel.add(namelabel);
          controlPanel.add(userText);

          controlPanel.add(loginButton);
          mainFrame.setVisible(true);  
       }
private void loginEvent(JTextField tokenText){

           if(tokenText.getText().length() == 0){

               JOptionPane.showMessageDialog(mainFrame, "Inserisci email", "", JOptionPane.ERROR_MESSAGE, null);
               return;

           }

           this.gestioneWebSocket();

       }
      private void gestioneWebSocket(){


            WebSocketContainer container = ContainerProvider.getWebSocketContainer();
            URI apiUri = URI.create("wss://websocketurltest");
            try {
                Session session = container.connectToServer(PrimaSchermata.class, apiUri);

            } catch (DeploymentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
     }

     @OnOpen
        public void onOpen(Session session) throws java.io.IOException
        {

            System.out.println("websocket opened");
            session.getBasicRemote().sendText("logintest");

        }
       @OnMessage
        public void onMessage(String message)
        {
            System.out.println("Message received: " + message);

            if(message.length() > 0){

                System.out.println("login ok");
                this.mainFrame.setVisible(false);
                secondFrame x = new secondFrame();
                this.mainFrame.dispose();
            }

         }

这是第二个JFrame:

public class secondFrame extends JFrame{

    public secondFrame() {

          setBounds(100, 200, 120, 120);
          setTitle("Second JFrame");
          setVisible(true);
          setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

}

我的问题是:

当我点击按钮并且我从websocket接收数据时,第二个JFrame显示但是第一个JFrame不会消失,尽管我在第一个JFrame中设置了visible = false。

哪里错了? 还是存在另一种方式来实现这个目标?

2 个答案:

答案 0 :(得分:0)

为什么不重用相同的JFrame,只需使用setContentPane(JComponent)重置视图。你一定需要有多个JFrame吗?

答案 1 :(得分:0)

尝试使用mainFrame.dispose();而不是将false设置为可见,并在打开第二个窗口或发送请求之前执行此