我有一个带有一个文本字段和一个按钮的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。
哪里错了? 还是存在另一种方式来实现这个目标?
答案 0 :(得分:0)
为什么不重用相同的JFrame,只需使用setContentPane(JComponent)重置视图。你一定需要有多个JFrame吗?
答案 1 :(得分:0)
尝试使用mainFrame.dispose();
而不是将false
设置为可见,并在打开第二个窗口或发送请求之前执行此。