doLayout()和ActionListener问题

时间:2012-04-11 13:38:51

标签: java swing awt

我是JSwing的新手,所以请原谅我初学者的一些问题。

在阅读了有关如何使用顶级容器的教程后,我在按钮中的actionPerformed事件中尝试了以下代码:

private void colgarActionListener(java.awt.event.ActionEvent evt) {

        auxButton = new JButton();
        auxButton.setSize(100,30);
        auxButton.setText("Me button");
        getContentPane().add(auxButton);
        getContentPane().doLayout();


}

正如您所料,它不起作用。该按钮不会出现。如果我尝试一个荒谬的事情,如:

getContentPane().setBackground(Color.red);

而不是

getContentPane().doLayout();

它有效。我做错了什么?

最后一个:如果我编写一个作为自定义ActionListener(带有参数的构造函数)的类,我应该把它放在哪里?作为GUI代码中的私有类?它只是感觉很脏......或者作为另一个包内的公共类。可能?

非常感谢。

问候。

马丁

2 个答案:

答案 0 :(得分:3)

您将需要了解布局管理器的工作方式以及如何使用它们是使用Swing的关键之一(顺便说一下,不是JSwing)。 Layout Manager Tutorial是一个很好的起点。

首先,避免使用null布局和setBounds(...)另一方面,contentPane通常使用BorderLayout。另外,我以前从未见过doLayout()以这种方式使用过。相反,在更改其组件后,我通常会在容器上调用validate()revalidate()后跟repaint()

答案 1 :(得分:1)

是的,ActionListener通常不仅实现为私有类,而且实现为匿名类,完全在使用站点。匿名类是你写的时候

x.addActionListener(new ActionListener() { public void actionPerformed(Event e) {
   ... stuff to do ...
}});