我正在使用 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 不存在

java 的Swing

关于java中的,Java.awt 和java.awt

写Java程序时偷懒简单写java.awt.*;之类导入很多模块会影响性能吗?

为啥在java中不能导入awt包

用java编写一个倒计时器代码。