如何刷新第二个表单



我有两种形式。第一个是使用jslider来决定按钮的编号。第二种形式是根据jslider值显示jbuttons。当我单击jbutton2时,第二个窗体将显示和显示按钮。它运行得很好。但是,我希望在不单击第一个表单中的jbutton2的情况下创建jbutton。相反,当我更改jslider时,它应该在运行时在第二个窗体上创建按钮,一旦我更改了jslider,它就应该在第二次窗体上再次创建该数量的按钮,并根据jslider值刷新第二次表单按钮数。我尝试过重新验证();,重新绘制();但它们不起作用,它们不会刷新第二个表单。那么,当第一个表单上的jslider发生更改时,我如何刷新第二个表单?

实际上,您应该提供一段代码,这样我们才能更好地理解它。但总的来说,我想我能理解你的意思(如果我没有错的话)。

基本上,您需要第二个表单上的布局管理器。这里有一个代码示例,我希望它能大致满足您的需求。

第一个表单的代码

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class FirstForm extends JFrame {
    JButton fbtn  = new JButton("Show F2");
    JSlider fslider = new JSlider(1, 10);
    SecondForm fsecond = new SecondForm();
    public FirstForm(){
        setSize(200,200);
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(fbtn,BorderLayout.NORTH);
        getContentPane().add(fslider,BorderLayout.CENTER);
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        fbtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                fsecond.setVisible(true);
            }
        });
        fslider.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                fsecond.setBtnCount(fslider.getValue());
            }
        });
    }
    public static void main(String[] args) {
        // TODO code application logic here
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
        public void run() {
                new FirstForm().setVisible(true);
            }
        });
    }
}

第二种形式的代码

import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
public class SecondForm extends JFrame {
    Vector fbtns = new Vector();
    int fshowbtncount=1;
    GridBagConstraints gbc = new GridBagConstraints();
    public SecondForm(){
        setSize(200, 200);
        setLocation(201, 0);
        getContentPane().setLayout(new GridBagLayout());
        fbtns.add(new JButton("Button ".concat(String.valueOf(fbtns.size()+1))));
        invalidateForm();
    }
    private void invalidateForm(){
       gbc.fill = GridBagConstraints.VERTICAL;
       for (int i=0; i<fbtns.size(); i++) {
           getContentPane().remove((Component)fbtns.get(i));
       }
       int y=0;
       for (int i=0; i<fshowbtncount; i++) {
           gbc.gridx=0;
           gbc.gridy=y++;
           getContentPane().add((Component)fbtns.get(i),gbc);
       }
       pack();
       invalidate();
    }
    public void setBtnCount(int cnt){
      if (cnt>=0 && cnt!=fshowbtncount) {
          fshowbtncount = cnt;
          while (fbtns.size()<cnt) {
            fbtns.add(new JButton("Button ".concat(String.valueOf(fbtns.size()+1))));    
          }
          invalidateForm();
      }  
    }
}

希望这能帮到你。

最新更新