gpt4 book ai didi

java - 在现有的 JFrame 中重绘一个新的 JFrame?

转载 作者:行者123 更新时间:2023-12-02 05:47:58 26 4
gpt4 key购买 nike

我试图在用户在他们正在使用的同一窗口中执行某些操作后显示不同的 JFrame,类似于登录功能。一直无法弄清楚如何做到这一点。

我现在的解决方法是隐藏当前的 JFrame,然后打开一个新的 JFrame,它可以模拟类似的效果。但理想情况下,我希望它只在同一个现有窗口中显示下一个 JFrame。

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Login extends JFrame {
private static int x = 0;
static JTextField txtInput = new JTextField(10);
static JButton btnSwitch = new JButton("Log on");

public Login(){
setLayout(new FlowLayout());

//add button and register
add(new JLabel("Enter password:"));
add(txtInput);
add(btnSwitch);
}

public static void main(String[] args) {
final JFrame frame = new Login();

frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200, 150);
frame.setVisible(true);


btnSwitch.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(txtInput.getText().equals("123")){
//frame = new GUIHelloWorld(); this doesn't work because "The final local variable frame cannot be assigned, since it is defined in an enclosing type"
//so I went with the below workaround
GUIHelloWorld frame = new GUIHelloWorld();

frame.setLocationRelativeTo(null); // Center the frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 100);
frame.setVisible(true);
}
}
});
}
}

一旦用户通过了 GUI 的第一部分,我想向他们展示类似这样的其他内容:

import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class GUIHelloWorld extends JFrame {
public GUIHelloWorld(){
setLayout(new GridLayout(0,1));

add(new JLabel("Hello World"));
add(new JLabel("Welcome to the 2nd part of the GUI"));
}

public static void main(String[] args) {
JFrame frame = new GUIHelloWorld();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 100);
frame.setVisible(true);
}

}

有人可以告诉我如何在用户正在使用的现有窗口中显示新的 JFrame 吗?

最佳答案

  1. 不要从 JFrame 扩展,尤其是在框架无法添加到其他框架的情况下。相反,您的个人 UI View 基于诸如 JPanel
  2. 之类的东西
  3. 创建 JFrame 的单个实例,将其布局管理器设置为使用 CardLayout .
  4. 将每个 View 添加到框架中,并适当命名每个 View
  5. 使用CardLayout根据需要在 View 之间切换

您还可以考虑使用JDialog对于登录窗口,但基本建议仍然存在;创建窗口、扩展组件...

关于java - 在现有的 JFrame 中重绘一个新的 JFrame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23863980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com