我有我的应用程序的主框架,我想有另一个框架登录。所以我写了两个类:一个主类和LoginFrame类。
/*Imported classes*/
public class Main {
private JFrame frame;
private LoginFrame loginFrame;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Main window = new Main();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Main() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame("Main Frame");
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JPanel mainPanel = new JPanel();
mainPanel.setBounds(10, 10, 426, 243);
frame.getContentPane().add(mainPanel);
mainPanel.setLayout(null);
loginFrame = new LoginFrame("Login...");
loginFrame.setVisible(true);
loginFrame.pack();
}
}
个字符
我得到的是两个画面:
的数据
当我打开登录框架时,什么都没有(按钮和文本字段)。问题是什么?这是实现登录框架的正确方法吗?
我希望有两个不同的框架,主要的一个空。第二个有两个字段,一个是用户名,另一个是密码和两个按钮。
3条答案
按热度按时间nwlqm0z11#
当我打开登录框架时,什么都没有(按钮和文本字段)。
当然了
问题出在哪里?
您永远不要向
LoginFrame
中添加任何组件,而是创建一个 * 单独的 *JFrame
,向其中添加一些组件,然后不对它做任何进一步的操作。83qze16e2#
字符串
pack()
语句将使框架以其首选大小显示。由于您使用的是空布局,因此框架没有首选大小。
解决方案是不要使用空布局。Swing被设计用于布局管理器。
阅读Layout Managers上的Swing教程
另外,请注意,框架的内容窗格是JPanel,因此无需创建单独的面板来添加到框架中。
阅读Swing基础教程。
xv8emn3q3#
信用卡John Bollinger on the original answer
你做错的是在
LoginFrame
类内部的框架上添加组件。我在说什么呢?字符串
你要把你的面板添加到什么里面?好吧,
JFrame frame
在你的LoginFrame
类里面!现在我要你看这里
型
你在做什么?登录框!
你犯的第二个错误是使用
loginFrame.pack()
,但阅读camickr's answer了解更多。你怎么解决这个问题?你有两个简单的选择。
选项A.在
LoginFrame
中为frame
创建一个getter好吧,这是相当直接的,它的工作,创建一个getter的
frame
和而不是使用loginFrame.setVisible(true);
使用loginFrame.getFrame().setVisible(true);
选项B.删除帧
删除框架对象。将
frame.getContentPane().add(panel);
替换为getContentPane().add(panel);
,这将使用this.getContentPane()...
,这意味着您将使用LoginFrame
。最重要的是删除
pack()
线!x1c 0d1x的数据
这应该会帮助你,你会得到这样的东西;)我相信这是你想要的。