1

我是 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 代码中的私有类?它只是感觉很脏......或者作为另一个包中的公共类。也许?

非常感谢。

问候。

马丁。

4

2 回答 2

3

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

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

于 2012-04-11T13:42:03.353 回答
1

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

x.addActionListener(new ActionListener() { public void actionPerformed(Event e) {
   ... stuff to do ...
}});
于 2012-04-11T13:48:24.737 回答