gpt4 book ai didi

java - 如何修改JPanel

转载 作者:行者123 更新时间:2023-12-02 12:13:02 25 4
gpt4 key购买 nike

我尝试更改 JPanel。我的主课

public class Main {
public static void main(String[] args) {
MyFrame frame = new MyFrame();
}
}

MyFrame 类。这里我添加JPanel并实现ActionListener

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;

public class MyFrame extends JFrame implements ActionListener{
MyPanel myPanel;
JButton myButton = new JButton("reset");
public MyFrame(){
this.setSize(300, 500);
this.setLayout(new BorderLayout());

myButton.addActionListener(this);
this.add(myButton, BorderLayout.SOUTH);

myPanel = new MyPanel();
myPanel.setButtons(3);

this.add(myPanel, BorderLayout.CENTER);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}

@Override
public void actionPerformed(ActionEvent event) {
if (event.getSource().equals(myButton)){
System.out.println("click");
this.remove(myPanel);
myPanel.setButtons(5);
this.add(myPanel, BorderLayout.CENTER);
//I want to change number of buttons on MyPanel to 5
}
}
}

和MyPanel类

public class MyPanel extends JPanel{
JButton[] buttons;
public MyPanel(){
this.setLayout(new FlowLayout());
}

public void setButtons(int x){
buttons = new JButton[x];
this.removeAll();
for (int i = 0; i < x; i++){
buttons[i] = new JButton(i+"");
this.add(buttons[i]);
}
}
}

我期望的是在单击“重置”按钮后我想要更改 JPanel(删除三个现有按钮并添加五个)。它会改变,但只有在我调整窗口大小之后。为什么?

最佳答案

您需要告诉框架在更改组件后它应该重新进行布局。因此,在我们的操作监听器方法中添加一行:

    public void actionPerformed( ActionEvent event ) {
if ( event.getSource().equals( myButton ) ) {
System.out.println( "click" );
this.remove( myPanel );
myPanel.setButtons( 5 );
this.add( myPanel, BorderLayout.CENTER );
revalidate(); // <-- tell frame to update!
}
}

关于java - 如何修改JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46389126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com