java 怎么在一个面板中重复添加同一个按钮
我就new了一个按钮,需要让一个面板里显9999个这按钮,当然功能是一样的,在不new按钮的情况下怎么做到呢?我在一个panel里add了这个按钮好几次,但是就显示一个。...
我就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);
}
}
首先想要这么多按钮,要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);
}
}
展开全部
毛,一个控件只能有一个父级组件,一个按钮重复添加是不可能的,必须要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。针对你说这些按钮都是一样操作,这基本上是最佳的方式了。
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。针对你说这些按钮都是一样操作,这基本上是最佳的方式了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
重复添加“同一个按钮”这个是不可能的。
但是猜测你的需求应该是看起来是同一个按钮,那么可按如下方式:
Action act = new AbstractAction("我的按钮") {
@Override
public void actionPerformed(ActionEvent e) {
// 我的业务逻辑
}
};
for(int i=0;i<10;i++) {
myPanel.add(new JButton(act));// 每次新建一个按钮,但是他们看起来相同
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
java是面向对象。简单点。你创建了一个(女性)对象,JFrame相当于一个房子。你首先把她放在第一个房间里面。接着有把她拉到第二个房间里面。最后带她到第三个房间里面。你说这个对象到底在哪里了。如果你想三个房间都有对象。你的首先有三个对象
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用一个for循环添加已经创建好了的一个按钮:
比如你已经创建好了面板对象pane和按钮:
Button button=new Button();
然后:
for(int i=0;i<9999;i++){
pane.add(button);
system.out.print(button);
}
你看下输出多少个啊!你要把位置设置好啊!有可能是重叠了。
比如你已经创建好了面板对象pane和按钮:
Button button=new Button();
然后:
for(int i=0;i<9999;i++){
pane.add(button);
system.out.print(button);
}
你看下输出多少个啊!你要把位置设置好啊!有可能是重叠了。
追问
输出了9999个一样的内存地址,但是还是只有一个按钮,用的FlowLayout的布局,我倒是想重叠呢
追答
你要做什么样的功能啊!可是就是这样写的啊!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询