java 怎么在一个面板中重复添加同一个按钮

我就new了一个按钮,需要让一个面板里显9999个这按钮,当然功能是一样的,在不new按钮的情况下怎么做到呢?我在一个panel里add了这个按钮好几次,但是就显示一个。不想new按钮是因为new的速度不敢恭维……

你是不是用的awt而不是Swing?
首先想要这么多按钮,要new这么多次是肯定的,不可能new一次然后反复添加就可以了。因为java组件容器中在添加时首先会检测该组件是否已经包含在一个容器中,如果已经包含,就会先将其移除,然后再重新添加。

然后关于慢的问题:我相信你是用的是AWT而不是Swing,这两个库的速度完全不一样,如果你使用Swing,添加10000个按钮并创建窗体应该在1秒左右就能完成了

下面这个代码你试一下就知道了:

import java.awt.*;
import javax.swing.*;

/**
*
* @author Jeky
*/
public class ButtonsDemo extends JFrame {

public ButtonsDemo() {
this.setLayout(new FlowLayout());
for (int i = 0; i < 10000; i++) {
JButton button = new JButton();
button.setPreferredSize(new Dimension(5, 5));
this.add(button);
}

this.setSize(800, 800);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}

public static void main(String[] args) {
new ButtonsDemo().setVisible(true);
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-07
毛,一个控件只能有一个父级组件,一个按钮重复添加是不可能的,必须要new9999次,如果内存吃不消你就要考虑是不是不这么做了,还有你要考虑的是不是要添加9999个监听。比较推荐的做法是。
public class Test extends JFrame {

public Test() {
Action action = new AbstractAction("Test") {

public void actionPerformed(ActionEvent e) {
System.out.println(" test ");
}
};
JToolBar toolbar = new JToolBar();
toolbar.setLayout(new FlowLayout());
for (int i = 0; i < 9999; i++) {
toolbar.add(action);
}
this.getContentPane().add(toolbar);
pack();
this.setSize(500, 500);
this.setVisible(true);
}

public static void main(String[] args) {
new Test();
}
}
忘记的你按钮,把注意力放到按钮动作上,这是推荐做法,代码也看起来舒服点,最少不会有那么多无聊的new。针对你说这些按钮都是一样操作,这基本上是最佳的方式了。本回答被提问者采纳
第2个回答  2015-07-21

重复添加“同一个按钮”这个是不可能的。

但是猜测你的需求应该是看起来是同一个按钮,那么可按如下方式:

Action act = new AbstractAction("我的按钮") {
   @Override
   public void actionPerformed(ActionEvent e) {
      // 我的业务逻辑
   }
};
for(int i=0;i<10;i++) {
   myPanel.add(new JButton(act));// 每次新建一个按钮,但是他们看起来相同
}

本回答被网友采纳
第3个回答  2011-11-07
java是面向对象。简单点。你创建了一个(女性)对象,JFrame相当于一个房子。你首先把她放在第一个房间里面。接着有把她拉到第二个房间里面。最后带她到第三个房间里面。你说这个对象到底在哪里了。如果你想三个房间都有对象。你的首先有三个对象
第4个回答  2011-11-07
用一个for循环添加已经创建好了的一个按钮:
比如你已经创建好了面板对象pane和按钮:
Button button=new Button();
然后:
for(int i=0;i<9999;i++){
pane.add(button);
system.out.print(button);
}
你看下输出多少个啊!你要把位置设置好啊!有可能是重叠了。追问

输出了9999个一样的内存地址,但是还是只有一个按钮,用的FlowLayout的布局,我倒是想重叠呢

追答

你要做什么样的功能啊!可是就是这样写的啊!

相似回答