Java 从ActionListener变量创建Jbuttons
这里的任务是从ActionListener中的字符串创建JButton,但是我们需要一种方法来刷新GUI面板,以便它知道GUI中的按钮创建者现在有了变量。我有一种感觉,按钮创建者必须在ActionListener中,ActionListener中缺少一个类似repaint()或removeAll的命令Java 从ActionListener变量创建Jbuttons,java,jbutton,actionlistener,Java,Jbutton,Actionlistener,这里的任务是从ActionListener中的字符串创建JButton,但是我们需要一种方法来刷新GUI面板,以便它知道GUI中的按钮创建者现在有了变量。我有一种感觉,按钮创建者必须在ActionListener中,ActionListener中缺少一个类似repaint()或removeAll的命令 public JButton[] turneringer = null; JButton AntallTurneringer = new JButton("number of buttons");
public JButton[] turneringer = null;
JButton AntallTurneringer = new JButton("number of buttons");
JMenuBar meny = new JMenuBar();
JMenu fil = new JMenu("somthing");
JMenuItem angre = new JMenuItem("deleate on button");
JMenuItem angre2 = new JMenuItem("deleate all buttons");
int d;
int i;
public GUI(){
this.setTitle("somthing");
this.setSize(500,500);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLayout(new FlowLayout());
this.setJMenuBar(meny);
meny.add(fil);
fil.add(angre2);
fil.add(angre);
angre2.addActionListener(this);
angre.addActionListener(this);
AntallTurneringer.addActionListener(this);
this.add(AntallTurneringer);
AntallTurneringer.setVisible(true);
if(d > 0){
turneringer = new JButton[d];
for(i = 0; i < d; i++){
turneringer[d] = new JButton();
turneringer[d].addActionListener(this);
turneringer[d].setText("Turnering "+(i+1));
turneringer[d].setVisible(true);
this.add(turneringer[d]);
}}
this.setVisible(true);
您可以为按钮使用单独的面板。这会简化整个过程
private JPanel buttonPnl;
public void actionPerformed(ActionEvent e){
buttonPnl.invalidate();
buttonPnl.clear();
//create the new buttons
buttonPnl.validate();
buttonPnl.repaint();
}
我已经解决了,不需要重新粉刷或清理任何东西。代码中的第一个问题是我在数组中使用了[d],而不是[i]。第二个问题是for循环的位置。这是下的工作代码
public JButton[] turneringer = null;
JButton AntallTurneringer = new JButton("Velg antall turneringer");
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
int d;
public GUI(){
this.setTitle("Squash Turnering");
this.setLayout(new GridLayout());
this.setSize(500,500);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
panel1.setBackground(Color.BLACK);
panel2.setBackground(Color.RED);
AntallTurneringer.addActionListener(this);
AntallTurneringer.setVisible(true);
panel1.add(AntallTurneringer);
add(panel1);
add(panel2);
panel2.setVisible(false);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent arg0) {
if(arg0.getSource().equals(AntallTurneringer)){
String tu = JOptionPane.showInputDialog(null, "number of buttons you want to add");
d = Integer.parseInt(tu);
turneringer = new JButton[d];
for(int i = 0; i < d; i++){
turneringer[i] = new JButton();
turneringer[i].addActionListener(this);
turneringer[i].setText("Turnering "+(i+1));
turneringer[i].setVisible(true);
turneringer[i].setSize(100, 100);
panel2.add(turneringer[i]);
}
panel1.setVisible(false);
panel2.setVisible(true);
}
}}
public JButton[]turneringer=null;
JButton antall turneringer=新JButton(“Velg antall turneringer”);
JPanel panel1=新的JPanel();
JPanel panel2=新的JPanel();
int d;
公共图形用户界面(){
本集标题为“壁球转弯”;
this.setLayout(新的GridLayout());
这个。设置大小(500500);
此.setLocationRelativeTo(空);
此.setDefaultCloseOperation(关闭时退出);
镶板1.立根背景(颜色:黑色);
镶板2.立根背景(颜色:红色);
AntallTurneringer.addActionListener(此);
AntallTurneringer.setVisible(真);
面板1.添加(安塔尔特纳格);
增加(第1组);
增加(第2组);
面板2.设置可见(假);
此.setVisible(true);
}
@凌驾
已执行的公共无效操作(操作事件arg0){
if(arg0.getSource().equals(AntallTurneringer)){
String tu=JOptionPane.showInputDialog(null,“要添加的按钮数”);
d=整数.parseInt(tu);
turneringer=新的JButton[d];
对于(int i=0;i
我添加了一些Jpanel。但是当我使用命令panel2.add(turneringer[d]);程序开始崩溃。您以前删除过所有按钮吗?添加两次按钮可能是导致此问题的原因。顺便说一句,buttonPnl.clear()
实际上应该是buttonPnl.removeAll()
。
public JButton[] turneringer = null;
JButton AntallTurneringer = new JButton("Velg antall turneringer");
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
int d;
public GUI(){
this.setTitle("Squash Turnering");
this.setLayout(new GridLayout());
this.setSize(500,500);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
panel1.setBackground(Color.BLACK);
panel2.setBackground(Color.RED);
AntallTurneringer.addActionListener(this);
AntallTurneringer.setVisible(true);
panel1.add(AntallTurneringer);
add(panel1);
add(panel2);
panel2.setVisible(false);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent arg0) {
if(arg0.getSource().equals(AntallTurneringer)){
String tu = JOptionPane.showInputDialog(null, "number of buttons you want to add");
d = Integer.parseInt(tu);
turneringer = new JButton[d];
for(int i = 0; i < d; i++){
turneringer[i] = new JButton();
turneringer[i].addActionListener(this);
turneringer[i].setText("Turnering "+(i+1));
turneringer[i].setVisible(true);
turneringer[i].setSize(100, 100);
panel2.add(turneringer[i]);
}
panel1.setVisible(false);
panel2.setVisible(true);
}
}}