首页 文章

摇摆和事件

提问于
浏览
0

嗯,这是一个非常新颖的猜测 . 我在窗户制作者的帮助下自己写了我的GUI应用程序的代码,我已经决定停止使用netbeans couse我已经在这里读了一些说这会很好的peope . 你可能认为我没有调查,但相信我,我做了我的功课......

我尝试了oracle说的方式:

  • 声明一个事件处理程序类,并指定该类实现ActionListener接口或扩展实现ActionListener接口的类 . 例如:

public class MyClass实现ActionListener {

  • 将事件处理程序类的实例注册为一个或多个组件上的侦听器 . 例如:

someComponent.addActionListener(instanceOfMyClass);

  • 包含在侦听器接口中实现方法的代码 . 例如:

public void actionPerformed(ActionEvent e){... //对动作作出反应的代码......}

和我自己的方式(错误,当然,但我不知道什么是错的)

package Todos;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Main extends JFrame {

private JPanel contentPane;
protected JButton btnNewButton;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Main frame = new Main();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });


}

/**
 * Create the frame.
 */
public Main() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.getContentPane().setLayout(new BorderLayout());
    //setDefaultLookAndFeelDecorated(false);
    //setIconImage(Image imagen);
    setTitle("");
    setSize(java.awt.Toolkit.getDefaultToolkit().getScreenSize());
    setPreferredSize(java.awt.Toolkit.getDefaultToolkit().getScreenSize());
    setLocationRelativeTo(null);

    this.btnNewButton = new JButton("New button");
    this.btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            asd(arg0);
        }
    });
    this.getContentPane().add(this.btnNewButton, BorderLayout.NORTH);
}

public void asd(ActionEvent arg0) {
    this.getContentPane().add(new JButton("asd"));
}
}

问题是,为什么这个代码不起作用,我点击后,我试图用ActionPerformed事件添加到JFrame的JButton是不可见的 .

这是一个示例代码,可能看起来很愚蠢,但我认为它简化了cuestion,因为我的问题是在几行代码中,它不一定向你展示孔proyect .

先感谢您!

1 回答

  • 2

    你的问题在这里:

    public void asd(ActionEvent arg0) {
        this.getContentPane().add(new JButton("asd"));
    }
    

    表格Container.add() javadoc:

    此方法更改与布局相关的信息,因此使组件层次结构无效 . 如果已显示容器,则必须在此后验证层次结构以显示添加的组件 .

    您需要调用 validate() 方法以使添加的按钮可见:

    public void asd(ActionEvent arg0) {
        this.getContentPane().add(new JButton("asd"));
        this.getContentPane().validate();
    }
    

相关问题