- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想设计一个简单的登录格式,为此我需要两个用于用户名/密码的 JTextField 和一个登录按钮。登录按钮按预期显示,但是当我添加 JTextField 时,我的 JFrame 中没有显示任何内容。如果有人可以帮助初学者就好了...
这是我的代码(我知道它很难看,但这只是一个“代码草图”):
package bucketlistpackage;
import java.awt.Container;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class GameFrame extends JFrame {
public GameFrame(String title) {
super(title); //sets title of frame
startFrame(); //sets details of main frame
final Container logincont = getContentPane(); //creates content pane
JFrame loginframe = new JFrame();
usernameField(loginframe);
loginButton(loginframe);
logincont.add(loginframe);
}
private void usernameField(JFrame loginframe) {
JTextField usernameF = new JTextField("Username", 1);
usernameF.setBounds(50, 50, 50, 20);
loginframe.add(usernameF);
usernameF.setVisible(true);
}
private void startFrame() {
this.setSize(1000, 1000);
this.setVisible(true);
}
private void loginButton(Container cont) {
JButton loginB = new loginButton();
loginB.setSize(300, 150);
loginB.setText("Login");
cont.add(loginB);
}
}
最佳答案
问题在于您如何在您的案例中相互添加组件。
您正在向容器添加 JFrame,但在所有情况下都应该是相反的情况。
另一个问题是您没有使用布局来管理 JFrame 上的组件位置。
另一个问题是,在添加所有内容后,您没有刷新窗口。
关于 Java 如何与 native UI 配合使用的一些简历:Java 为 UI 创建一个新线程。因此,如果您打开调试器,您将看到 AWT 线程以及主线程和其他线程。这意味着您必须以正确的方式进行管理,因为在应用程序启动 SWING 后,您确定的 react 函数将为它的行为方式奠定基础。您的主线程将会终止,但可视线程将保持 Activity 状态。
如果您刚刚开始编程,我鼓励您在转向 SWING 或 AWT 之前多练习一些 native Java 语言。这个库使用起来非常痛苦和棘手。
另一件事是 SWING 库遵循组件的层次结构:JFrame > JPanels > 组件
在您的代码中,您已经使用了所有这些方法,但方式杂乱无章。 JFrame 是主应用程序窗口,将在其中显示图形(也可以是 Canvas 或您想要使用的任何类)。 JPanel 是组织者,您可以使用不同的布局来组织其中的任何内容。最后,组件都很好......一切!组件可以是 JTextField,也可以是 JPanel 或 JButton。
SWING 的想法是创建多个面板并组织其中的最终组件,利用不同布局的帮助来了解使它们在许多不同窗口尺寸中具有吸引力的最佳方法。
最后,如果您使用 Eclipse,有一个名为 WindowBuilder 的插件可能会对您有所帮助。如果您对 Java 非常陌生,我不建议您使用它,因为它会让您非常依赖它,而不是学习如何使用 SWING 进行实际编码。
希望这有帮助!!!
顺便说一句,要修复上面的代码,我会这样做:
public GameFrame(String title) {
super(title); //sets title of frame
startFrame(); //sets details of main frame
final Container logincont = getContentPane(); //creates content pane
logincont.setLayout(new BorderLayout());
usernameField(logincont, BorderLayout.NORTH);
loginButton(logincont, BorderLayout.CENTER);
this.revalidate();
this.repaint();
}
private void usernameField(Container loginframe, String direction) {
JTextField usernameF = new JTextField("Username");
// usernameF.setBounds(50, 50, 50, 20);
loginframe.add(usernameF, direction);
usernameF.setVisible(true);
}
private void startFrame() {
this.setSize(1000, 1000);
this.setVisible(true);
}
private void loginButton(Container cont, String direction) {
JButton loginB = new JButton();
loginB.setSize(300, 150);
loginB.setText("Login");
cont.add(loginB, direction);
}
关于java - JTextBox 和所有以下 JComponent 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57959922/
我正在处理 Java 编程挑战,我创建了一个 GUI,其中有 3 个框用于输入数字 A、B 和 C,然后我有一个操作顺序框,用户可以在其中输入 A、B、C ,以及他们选择的任何数学运算符。单击“计算”
我正在尝试连接 jtextbox 中的每个表字段,但是当我运行此代码时,它显示语法错误。我正在使用 sqlite 和 netbeans 我希望你能帮助我 try{ String sq
我有一个 JTextField,我希望系统在用户离开文本字段时对用户输入的内容进行一些处理。但是,您可以仅添加到 JTextField 的 ActionListener 仅在用户按 Enter 时才会
我正在尝试使用此正则表达式验证/过滤我的 jtextbox: ^(([A-za-z]+[\s]{1}[A-za-z]+)|([A-Za-z]+))$ 我想用一个空格过滤两个名字。 尝试使用 keyty
有没有办法或者可以将actionListener创建为独立类?我设法使用 loginView 类创建按钮监听器,它工作得很好,但我正在尝试从另一个类(LoginLogic)实现登录功能。 我遇到的问题
public void actionPerformed(ActionEvent evt) {// handle button event Object source = evt.get
我有一个简单的二叉树打印机: public String displayTree(){ if(root != null){ return this.toString(new S
我想设计一个简单的登录格式,为此我需要两个用于用户名/密码的 JTextField 和一个登录按钮。登录按钮按预期显示,但是当我添加 JTextField 时,我的 JFrame 中没有显示任何内容。
我目前有这个允许数字并删除数字,我想添加验证以允许“。”和“,”但我有点不确定。我已经尝试过这个。不确定到底出了什么问题(非常抱歉)。 public void keyTyped(KeyEvent e)
我试图将文本框中的值插入数据库,但收到错误com.microsoft.sqlserver.jdbc.SQLServerException:字符串或二进制数据将被截断。我认为问题出在单选按钮上,但是当我
我正在制作一个程序,我需要在我的 JFrame 中的 JPanel 中制作一个 JTextField。一切都设置为可见。我可以在同一个 JPanel 中看到 JLabel,但看不到我的 JTextFi
我一直致力于一个个人项目,以更好地编程。我的目标是让它更强大,我才刚刚开始。我现在是一名计算机科学专业的学生。无论如何,我正在制作如图所示的程序的一部分。我计算了小时工资并提供了一些我尚未实现的输出。
我有一个文本框。当用户在文本框中输入名称时,我希望从表格中获取详细信息 String getTxt = text.getText(); ResultSet rs=st.executeQuery("SE
我想创建一个与学校学生相关的小型 Netbeans 应用程序。我有两个JTextFields。在此JTextFields中,我想显示一些单词,例如“apple”,然后想显示“mango”等. 详情如下
我是一名优秀的程序员,十分优秀!