问题描述:例如有一个JFrame,上有一个JButton与一个JPanel.点击JButton会调用一个方法.这个方法是在JPanel内添加几个JButton.这时JPanel内不会立刻显示新增的几个JButton.为什么?但使JFrame最大或最小化等时会显出,这又是为什么?可以让新增的JButton显示出来吗?如果不可以为什么.如何实现类似功能呢?如果可以,要如何做?
调试欢乐多
最大或最小化窗体时会显示,是因为你让窗体刷新过了。
当然可以让新增的JButton马上显示出来,调用该JPanel的validate()方法即可。
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MainFrame extends JFrame {
private JPanel mainPanel = new JPanel();
private JButton btnAdd = new JButton("添加按钮");
private JPanel contentPane;
public MainFrame()
{
super("动态添加按钮");
setSize(400,300);
//
JPanel pnlSouth = new JPanel();
pnlSouth.add( btnAdd );
//
contentPane = (JPanel) getContentPane();
contentPane.add(mainPanel);
contentPane.add("South",pnlSouth);
//
btnAdd.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
JButton btnNew = new JButton("新按钮");
mainPanel.add(btnNew);
mainPanel.validate(); //关键代码
}
});
} public static void main(String[] args) {
MainFrame f = new MainFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}