我对Java Swing非常陌生,我有一个问题。
我必须创建一个登录窗口,从类似于此image的东西中获得灵感(类似于此,scilicet窗口必须显示2个文本字段,用户在其中插入其用户名和密码以及执行登录操作的按钮):
好的,我认为这很简单,我已经实现了以下类:
package com.techub.crystalice.gui.login;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import org.jdesktop.application.SingleFrameApplication;
import com.techub.crystalice.gui.Constants;
import com.techub.crystalice.gui.GUI;
public class LoginFrame extends SingleFrameApplication {
@Override
protected void startup() {
// TODO Auto-generated method stub
System.out.println("DENTRO: LoginFrame() ---> startup()");
this.getMainFrame().setTitle("MyApp Login");
//this.getMainFrame().setSize(600, 350); // Setta le dimensioni del JFrame che rappresenta la finestra principale
this.getMainFrame().pack();
Container mainContainer = this.getMainFrame().getContentPane(); // Recupera l'oggetto Container del JFrame
// Imposta un layput manager di tipo GridLayout per il contenitore principale: 3 righe ed una singola colonna:
mainContainer.setLayout(new GridLayout(3,1));
// Contenitore rappresentato da 6 righe a singola colonna contenente i campi testuali e di input del login:
JPanel body = new JPanel();
body.setLayout(new GridLayout(5, 1));
JPanel usernNameLabelPabel = new JPanel();
usernNameLabelPabel.add(new JLabel("Username"));
body.add(usernNameLabelPabel);
JPanel userNameTextPanel = new JPanel();
JTextField userName = new JTextField();
userNameTextPanel.add(userName);
body.add(userNameTextPanel);
JPanel passwordLabelPanel = new JPanel();
passwordLabelPanel.add(new JLabel("Password"));
body.add(passwordLabelPanel);
JPanel passwordTextPanel = new JPanel();
JTextField password = new JTextField();
passwordTextPanel.add(password);
body.add(passwordTextPanel);
this.getMainFrame().add(body); // Aggiunge al JFrame principale il JPanel contenente il form di login
show(this.getMainFrame());
JPanel footer = new JPanel();
footer.setLayout(new FlowLayout(FlowLayout.CENTER));
JButton loginButton = new JButton("Login");
footer.add(loginButton);
this.getMainFrame().add(footer); // Aggiunge al JFrame principale il JPanel contenente il bottone di login
}
public static void main(String[] args) {
System.out.println("DENTRO: LoginFrame() ---> main()");
launch(LoginFrame.class, args);
}
}
这个类使用了一个名为JDesktop的小框架,它涉及启动()方法的定义,但这是纯Swing代码。唯一要说的是,我通过这条代码行获取main*JFrame*:
this.getMainFrame()
这个例子似乎不好,事实上我在登录表单可视化中有一些美学问题,因为我得到了以下结果:
正如您所看到的,它存在许多错误:
我可以尝试什么来解决这些问题?
JPanel passwordLabelPanel = new JPanel();
passwordLabelPanel.add(new JLabel("Password"));
body.add(passwordLabelPanel);
您在几个地方完成了类似的代码,将一个组件(JLabel/JTextFeild
)放在另一个容器中,然后将其添加到根容器body
中。任何面板都有FlowLayout
作为其默认布局,它遵循您要添加到其中的组件的首选大小。您正在将您的密码标签
添加到passwordLabelGroup
但没有设置它的首选大小。您在TextField
和它的容器passwordTextGroup
中遇到的相同问题。您可以为此标签
和text Feild
设置首选大小以获得一些可能令您满意的输出。但事实是,您根本不需要这个外部面板。只需将标签和文本字段直接添加到body
面板即可。
我可以尝试什么来解决这些问题?
上述解释也是一种解决方案。但从长远来看,除非您学习布局管理器,否则它们对您没有任何意义。
最好、最简单、最有效、值得努力的方法是从这里开始:第一课:在容器中放置组件,相信我,这将节省您包括我们在内的大量时间。
启动错误 ApplicationContext.若要显示条件报告,请在启用“调试”的情况下重新运行应用程序。2019-10-17 15:44:43.968错误10460--[main]O.S.Boot.SpringApplication:应用程序运行失败 我的pom.xml:
我正试图在Android Studio上调试我的项目——一个非常简单的东西——hello world。我得到这个信息: "安装未成功。应用程序无法安装:INSTALL_FAILED_MISSING_SHARED_LIBRARY apk列表:[0]'C:\Users\Pierr\AndroidStudioProjects\Hello\app\build\outputs\apk\debug\app d
正在启动Gradle守护进程...Gradle守护进程5 s 654 ms启动 失败:生成失败,出现异常。 > 其中:构建文件'c:\users\asus\androidstudioprojects\culturelwordsgame\app\Build.gradle'行:1 错误:评估项目':app'时出现问题。 未能应用插件[id'com.android.internal.version-ch
在调试模式下启动SM A105F上的lib\main.dart...正在运行分级任务“组装调试”...√build build\app\outputs\flutter-apk\app-debug.apk。正在安装build\app\outputs\flutter-apk\app.apk...错误:ADB退出,退出代码为1执行流式安装
在我的pom.xml我有这个: 作为依赖,我有这些: 当我建立我的。jar与mvn clean一起安装,并将其上传到AEM。我看到了: 这些红色的“多余”包裹,它都解决不了的是什么,我该怎么解决? 在我构建软件包并将其上传到AEM之前,如何防止这种情况发生?
解决问题