[英]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.