簡體   English   中英

打開新窗口Jframe Java

[英]Open new window Jframe Java

我有一個帶有一個文本框和一個按鈕的jframe。 當我點擊按鈕時,我創建了一個網絡套接字,並從中接收數據。 當數據到達時,我想隱藏這個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。

我哪里錯了? 還是存在另一種實現這一目標的方法?

為什么不重用相同的JFrame並使用setContentPane(JComponent)重置視圖。 您是否需要多個JFrame?

嘗試使用mainFrame.dispose(); 而不是將visible設置為false ,並打開第二個窗口或發送請求之前執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM