即时切换GridbagLayout [英] Switching GridbagLayout on the fly

查看:87
本文介绍了即时切换GridbagLayout的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我好几天都在尝试这个。当我按下按钮时,如何切换或更改GridBagLayout的所有JButton?好像卡住了。它不会取代旧的......



Hi,
I had been trying this for days. How do I switch or change all the JButton of GridBagLayout when I press a button? It seems stuck. It won't replace the old one.....

package gridlayoutjumper;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class GridLayoutJumper extends JFrame implements ActionListener{
    JFrame timeTableFrame = new JFrame("Helo");  
    JPanel timeTablePnl = new JPanel(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    JButton jb1 = new JButton("Jbutton1");
    JButton jb4 = new JButton("Change");
    JButton jb3 = new JButton("Jbutton3");
    JButton jb2 = new JButton("Jbutton2");
            
    public GridLayoutJumper(){
    
    }
    
    public void newLayout1(){

        System.out.println("newLayout1 executed");
        JButton jb5 = new JButton("Jbutton5");
        JButton jb6 = new JButton("Jbutton6");
        JButton jb7 = new JButton("Jbutton7");
        
        c.gridx = 0;
        c.gridy = 0;
        c.weightx = 1;
        c.weighty = 1;
        c.insets = new Insets(0, 15, 0, 15); 
        timeTablePnl.add(jb5, c);
        
        c.gridx = 1;
        c.gridy = 0;
        c.weightx = 1;
        c.weighty = 1;
        c.insets = new Insets(0, 15, 0, 15);  
        timeTablePnl.add(jb6, c);
        
        c.gridx = 0;
        c.gridy = 1;
        c.weightx = 1;
        c.weighty = 1;
        c.insets = new Insets(0, 15, 0, 15);  
        timeTablePnl.add(jb7, c);
        
        timeTablePnl.validate();
        timeTablePnl.repaint();
    }
    
    public void createComponent(){
        timeTableFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        timeTableFrame.setPreferredSize(new Dimension(500, 500));
        timeTableFrame.setMinimumSize(new Dimension(500, 500));
        timeTableFrame.add(timeTablePnl);

        c.gridx = 0;
        c.gridy = 0;
        c.weightx = 1;
        c.weighty = 1;
        c.insets = new Insets(0, 15, 0, 15);
        timeTablePnl.add(jb1, c);
        
        c.gridx = 1;
        c.gridy = 0;
        c.weightx = 1;
        c.weighty = 1;
        c.insets = new Insets(0, 15, 0, 15); 
        timeTablePnl.add(jb2, c);
        
        c.gridx = 0;
        c.gridy = 1;
        c.weightx = 1;
        c.weighty = 1;
        c.insets = new Insets(0, 15, 0, 15);  
        timeTablePnl.add(jb3, c);
        
        c.gridx = 1;
        c.gridy = 1;
        c.weightx = 1;
        c.weighty = 1;
        c.insets = new Insets(0, 15, 0, 15);  
        timeTablePnl.add(jb4, c);
        
        jb4.addActionListener(this); 
        timeTableFrame.setVisible(true);
    }
    
    
    @Override
    public void actionPerformed(ActionEvent e){
        Object source = e.getSource();
        if(source == jb4){
            System.out.println("Gotcha");
            newLayout1();
        }
    }
    
    public static void main(String[] args) {
        GridLayoutJumper x = new GridLayoutJumper();
        x.createComponent();
    }
}

推荐答案

您必须从 timeTablePnl 面板。

并重新分配 girdbagconstraint

You have to remove all from timeTablePnl panel.
And also reassign girdbagconstraint
 public void newLayout1(){
................. 
    timeTablePnl.removeAll();
.................   
    c = new GridBagConstraints();
.............
}


这篇关于即时切换GridbagLayout的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆