我正在使用 java 中的 awt 包编写程序,但没有添加我的组件
Posted
技术标签:
【中文标题】我正在使用 java 中的 awt 包编写程序,但没有添加我的组件【英文标题】:I am writing a program using awt pakage in java but my components are not getting added 【发布时间】:2021-10-01 16:16:44 【问题描述】:我正在使用 AWT 包编写一个程序,在该包中我还实现了 ActionListner,它显示了我在按钮上的点击次数。
package awtlistenerdemo;
import java.awt.*;
import java.awt.event.*;
public class AwtListenerDemo implements ActionListener
TextField t1 = new TextField(30);
Button b;
int count = 0;
Frame f;
AwtListenerDemo()
f = new Frame("Action Listener Example");
b = new Button("Ok");
f.setLayout(null);
b.setBounds(100, 100, 60, 20);
t1.setBounds(100, 200, 80, 30);
f.add(b);
f.add(t1);
b.addActionListener(this);
@Override
public void actionPerformed(ActionEvent e)
if (e.getSource() == b)
count++;
t1.setText("Button Clicked" + count + "Times");
public static void main(String[] args)
Frame f = new Frame("Action Listener Example");
f.setVisible(true);
f.setSize(300, 300);
【问题讨论】:
我正在使用 AWT 包编写程序 为什么?作为 GUI 的 AWT 已经结束!使用 Swing/JavaFX 因为我是初学者所以我想从基础开始。 不是一个好主意。这不是基本的。死了 【参考方案1】:main
方法从不构造AwtListenerDemo
,因此您所看到的只是在该方法中创建的标准空白框架。一旦这个问题得到解决,main 方法中的一些语句需要移到构造函数中并应用于它创建的框架。
这是结果:
import java.awt.*;
import java.awt.event.*;
public class AwtListenerDemo implements ActionListener
TextField t1 = new TextField(30);
Button b;
int count = 0;
Frame f;
AwtListenerDemo()
f = new Frame("Action Listener Example");
b = new Button("Ok");
f.setLayout(null);
b.setBounds(100, 100, 60, 20);
t1.setBounds(100, 200, 80, 30);
f.add(b);
f.add(t1);
b.addActionListener(this);
// ADD this!
f.setSize(300,300);
// then set it VISIBLE
f.setVisible(true);
@Override
public void actionPerformed(ActionEvent e)
if (e.getSource() == b)
count++;
t1.setText("Button Clicked" + count + "Times");
public static void main(String[] args)
// Change the main code to..
new AwtListenerDemo();
一般提示
-
请参阅this answer 有很多充分的理由放弃 AWT 组件以支持 Swing。除此之外,在当今时代,很少有人使用过 AWT(因此无法帮助解决问题),或者如果他们使用了,则忘记了更精细的细节(因此给出错误的建议)。如链接答案中所述,Swing 是基于 AWT 构建的,但在进行转换时需要了解差异。说真的,从 Swing 开始或直接转到 Java-FX(一个完全不同的 GUI 工具包,既不基于 Swing 也不基于 AWT)。 警告:这是我唯一一次帮助您修复损坏的 AWT 代码。 (3)
Java GUI 必须在不同的操作系统、屏幕尺寸、屏幕分辨率等上使用不同语言环境中的不同 PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或combinations of them 以及white space 的布局填充和边框。即使在那个简短的示例中,也可以看到(这些问题的开始),因为:a)按钮、文本字段或两者都不是居中对齐的。如果框架稍微调整大小,它会both。 b) 文本字段的大小猜测也是错误的 - 不足以显示文本!
与(1)相关,这段代码还是有一些问题。我做了回答问题所需的最低限度的工作,不会再做更多了。
【讨论】:
【参考方案2】:TextField t1 = new TextField(30);
Button b;
int count = 0;
Frame f;
AwtListenerDemo()
b = new Button("Ok");
f = new Frame("Action Listener Example");
f.setSize(300, 300);
f.addWindowListener(new WindowAdapter()
public void windowClosing(WindowEvent e)
f.dispose();
);
f.setLayout(null);
b.setBounds(100, 100, 60, 20);
t1.setBounds(100, 200, 80, 30);
f.add(b);
f.add(t1);
f.setVisible(true);
b.addActionListener(this);
@Override
public void actionPerformed(ActionEvent e)
if (e.getSource() == b)
count++;
t1.setText("Button Clicked" + count + "Times");
public static void main(String[] args)
new AwtListenerDemo();
【讨论】:
以上是关于我正在使用 java 中的 awt 包编写程序,但没有添加我的组件的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio - 错误:包 java.awt.geom 不存在