Java 如何在构造函数之后添加组件(例如使用mouseClicked事件)
我可以在构造函数中添加组件,但在构造函数完成后我不能添加相同的组件。有人能帮我吗?下面是我的示例代码:Java 如何在构造函数之后添加组件(例如使用mouseClicked事件),java,swing,Java,Swing,我可以在构造函数中添加组件,但在构造函数完成后我不能添加相同的组件。有人能帮我吗?下面是我的示例代码: public class MainFrame extends JFrame implements MouseListener{ JButton btnAdd = new JButton("Add new button"); int i = 0; Container container; public static void main(String[] arg
public class MainFrame extends JFrame implements MouseListener{
JButton btnAdd = new JButton("Add new button");
int i = 0;
Container container;
public static void main(String[] args) {
MainFrame frame = new MainFrame();
frame.setVisible(true);
}
public MainFrame() {
container = getContentPane();
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(800, 700);
container.setLayout(new FlowLayout());
container.add(btnAdd);
btnAdd.addMouseListener(this);
// Add 2 additional buttons
i++;
container.add(new JButton("Btn " + i));
i++;
container.add(new JButton("Btn " + i));
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Layout = " + container.getLayout());
i++;
container.add(new JButton("Btn " + i)); //this is not happening! WHYYYY????
System.out.println("Mouse klicked");
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
}
如果我在构造函数中添加按钮,一切正常。但当我尝试在mouseEvent中添加相同的组件时,却没有发生。我认为这与布局有关,但我不确定。添加新按钮后,您需要在mouseClicked()
方法中调用和方法
但是,您也不应该在JButton
中使用MouseListener
,而应该使用
您也不应该在类中扩展
JFrame
,如果您需要扩展某个东西来扩展JPanel
,请参阅:两个更好的策略:1)将组件添加到具有在构造函数中添加的cardlayout的面板中。添加的另一个组件是一个空白面板,其中添加了鼠标侦听器。当该面板检测到鼠标点击时,它会翻转到显示该按钮的另一张卡。2) 因为它是一个按钮,所以在构造函数中添加该按钮,但禁用它。直到鼠标点击。也如@FrakCool所述。对于按钮,请添加操作侦听器,而不是鼠标侦听器。@Frankcool我确实尝试过重新绘制(),但由于缺少revalidate(),因此无法工作。revalidate()方法对我来说是新的。我不知道这件事。谢谢你的支持!