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

我就new了一个按钮,需要让一个面板里显9999个这按钮,当然功能是一样的,在不new按钮的情况下怎么做到呢?我在一个panel里add了这个按钮好几次,但是就显示一个。... 我就new了一个按钮,需要让一个面板里显9999个这按钮,当然功能是一样的,在不new按钮的情况下怎么做到呢?我在一个panel里add了这个按钮好几次,但是就显示一个。不想new按钮是因为new的速度不敢恭维…… 展开
 我来答
skyyks0001
2011-11-07 · TA获得超过430个赞
知道小有建树答主
回答量:228
采纳率:100%
帮助的人:399万
展开全部
你是不是用的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);
}
}
daay1986
2011-11-07 · TA获得超过6018个赞
知道大有可为答主
回答量:2208
采纳率:0%
帮助的人:1476万
展开全部
毛,一个控件只能有一个父级组件,一个按钮重复添加是不可能的,必须要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。针对你说这些按钮都是一样操作,这基本上是最佳的方式了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wh猎人
2015-07-21 · TA获得超过1125个赞
知道大有可为答主
回答量:1157
采纳率:89%
帮助的人:664万
展开全部

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

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

Action act = new AbstractAction("我的按钮") {
   @Override
   public void actionPerformed(ActionEvent e) {
      // 我的业务逻辑
   }
};
for(int i=0;i<10;i++) {
   myPanel.add(new JButton(act));// 每次新建一个按钮,但是他们看起来相同
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6cde26a
2011-11-07 · TA获得超过110个赞
知道小有建树答主
回答量:252
采纳率:0%
帮助的人:131万
展开全部
java是面向对象。简单点。你创建了一个(女性)对象,JFrame相当于一个房子。你首先把她放在第一个房间里面。接着有把她拉到第二个房间里面。最后带她到第三个房间里面。你说这个对象到底在哪里了。如果你想三个房间都有对象。你的首先有三个对象
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Wml19900109
2011-11-07 · 超过13用户采纳过TA的回答
知道答主
回答量:148
采纳率:100%
帮助的人:48万
展开全部
用一个for循环添加已经创建好了的一个按钮:
比如你已经创建好了面板对象pane和按钮:
Button button=new Button();
然后:
for(int i=0;i<9999;i++){
pane.add(button);
system.out.print(button);
}
你看下输出多少个啊!你要把位置设置好啊!有可能是重叠了。
追问
输出了9999个一样的内存地址,但是还是只有一个按钮,用的FlowLayout的布局,我倒是想重叠呢
追答
你要做什么样的功能啊!可是就是这样写的啊!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式