我尝试更改JPanel。 我的主要课程
<div class="wrapper">
<div class="item1"></div>
<div class="item2"></div>
<div class="item3"></div>
</div>
MyFrame类。在这里,我添加了JPanel并实现了ActionListener
public class Main {
public static void main(String[] args) {
MyFrame frame = new MyFrame();
}
}
和MyPanel课程
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
}
}
}
点击&#34;重置&#34;我的期望是什么?按钮我想要更改JPanel(remowe三个现有按钮并添加五个)。 它会改变,但只有在我调整窗口大小之后。为什么呢?
答案 0 :(得分:1)
更改组件后,您需要告诉框架它应该重新进行布局。因此,在我们的动作侦听器方法中添加一行:
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!
}
}
答案 1 :(得分:0)
使用@dosenfant的代码,您也可以在重新验证之前重新绘制。
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 );
repaint();
revalidate();
}
}