我做一个演示插补法的程序,框架里有两个面板,左面板用于绘图,右面板用于采集输入,问题有:
1,运行程序后界面上什么都没有,最大化一次后里面的组件才出来,对话框走哪儿哪儿就没了?
2,点击菜单弹出对话框后,左面板被破坏,好像露出了背景色?
3,点击“确定”按钮后绘图开始,可是左面板图没出来却把右面板所有东西复制过去了,实在不解哪里出了问题?(重点问题)
部分代码:.....
        //面板添加
        Caidan dan=new Caidan();
        setJMenuBar(dan);
        
        dangliang=new Dangliang(this,"设置当量",false);
        shijian=new Shijian(this,"间隔时间",false);
        guanyu=new Guanyu(this,"关于我们",false);
        shuru=new Shuru(this);
        jisuan=new Jisuan(shuru);
        huabu=new Huitu ();      
        huabu.jiji=jisuan;
        
        content.setLayout(new GridLayout(1,2,5,0));
        content.add(huabu);
        content.add(shuru);  
        .......
        //事件处理
        if(evt.getSource()==shuru.b){
            jisuan.main();            
            huabu.huan();
            huabu.repaint();            
        }
        .......
        //左面板 类
          class Huitu extends JPanel{
    
    int[][] z;
    int N;
    Jisuan jiji;
    
    public Huitu(){
        super();
        z=new int[60][2];
    }
    public void huan(){
        for(int i=0;i<=59;i++){
            this.z[i][0]=jiji.a[i][0];
            this.z[i][1]=jiji.a[i][1];
        }
    }
    
    @Override
    public void paint(Graphics comp){
        Graphics comp2D=(Graphics2D)comp .create();        
        comp2D.setColor(Color.red);        
        comp2D.drawLine(50*z[0][0], 50*z[0][1], 50*z[N][0], 50*z[N][1]);        
        for(int i=0;i<=N-1;i++){
               comp2D.drawLine(50*z[i][0],50*z[i][1],50*z[i+1][0],50*z[i+1][1]);
        }
    }
}框架2d界面

解决方案 »

  1.   

    在相同的一个点处如果有两个控件同时处于显示状态,但是页面只能显示一个。那么GUI会怎么处理呢?
    一般情况下是先添加的组件覆盖后添加的组件。但是如果第二个组件有调用的话好像第二个组件就显示出来了。。
    所以我的做法一般是尽量让两个组件之间相互不覆盖。即使覆盖,也尽量把一个的背景设为透明色。
      

  2.   

    这当初我学C#的GUI的时候也遇到过类似问题。
      

  3.   

    我的代码粘少了,你可能没发现,我的左右面板是分开的,各占一半,应该不会重叠呀
    //主类的构造函数部分代码package chabufa;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class Chabufa extends JFrame implements ActionListener{
        JMenuBar caidan;
        JMenu c1,c2,c3;
        JMenuItem m1,m2,m3,f1,f2,f3,f4,f5,f6,s1,s2,c33;
        
        Dangliang dangliang;
        Shijian shijian;
        Guanyu guanyu;
        
        Huitu huabu;//左面板绘图类
        Shuru shuru;//右面板输入类
        Jisuan jisuan;//数据处理类
        
        public Chabufa(){
            super("数控插补法");
            setSize(1000,600);     
            setDefaultCloseOperation(EXIT_ON_CLOSE); 
            setVisible(true);
            //setBackground(Color.gray);
            Container content=getContentPane();
            
            Caidan dan=new Caidan();//菜单类
            setJMenuBar(dan);
            
            dangliang=new Dangliang(this,"设置当量",false);
            shijian=new Shijian(this,"间隔时间",false);
            guanyu=new Guanyu(this,"关于我们",false);
            shuru=new Shuru(this);
            jisuan=new Jisuan(shuru);
            huabu=new Huitu ();      
            huabu.jiji=jisuan;
            
            content.setLayout(new GridLayout(1,2,5,0));
            content.add(huabu);
            content.add(shuru);        
            ......
            如果需要,我把txt格式文件发给你,你用软件运行一下看看是怎么错了,谢谢
      

  4.   

    我的代码粘少了,你可能没发现,我的左右面板是分开的,各占一半,应该不会重叠呀
    //主类的构造函数部分代码package chabufa;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class Chabufa extends JFrame implements ActionListener{
        JMenuBar caidan;
        JMenu c1,c2,c3;
        JMenuItem m1,m2,m3,f1,f2,f3,f4,f5,f6,s1,s2,c33;
        
        Dangliang dangliang;
        Shijian shijian;
        Guanyu guanyu;
        
        Huitu huabu;//左面板绘图类
        Shuru shuru;//右面板输入类
        Jisuan jisuan;//数据处理类
        
        public Chabufa(){
            super("数控插补法");
            setSize(1000,600);     
            setDefaultCloseOperation(EXIT_ON_CLOSE); 
            setVisible(true);
            //setBackground(Color.gray);
            Container content=getContentPane();
            
            Caidan dan=new Caidan();//菜单类
            setJMenuBar(dan);
            
            dangliang=new Dangliang(this,"设置当量",false);
            shijian=new Shijian(this,"间隔时间",false);
            guanyu=new Guanyu(this,"关于我们",false);
            shuru=new Shuru(this);
            jisuan=new Jisuan(shuru);
            huabu=new Huitu ();      
            huabu.jiji=jisuan;
            
            content.setLayout(new GridLayout(1,2,5,0));
            content.add(huabu);
            content.add(shuru);        
            ......
            如果需要,我把txt格式文件发给你,你用软件运行一下看看是怎么错了,谢谢
    给你一个建议吧
    content.setLayout(null);//布局管理器置空,
    大小设置为不可变。
    然后里面的两个大的组件用setBounds来设置绝对坐标。两个组件评分frame
    你看这样是否还重叠,如果不会,那么就是你布局管理器的问题,如果会,那么就是你大组件下小组件的重叠问题
      

  5.   

    我的代码粘少了,你可能没发现,我的左右面板是分开的,各占一半,应该不会重叠呀
    //主类的构造函数部分代码package chabufa;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class Chabufa extends JFrame implements ActionListener{
        JMenuBar caidan;
        JMenu c1,c2,c3;
        JMenuItem m1,m2,m3,f1,f2,f3,f4,f5,f6,s1,s2,c33;
        
        Dangliang dangliang;
        Shijian shijian;
        Guanyu guanyu;
        
        Huitu huabu;//左面板绘图类
        Shuru shuru;//右面板输入类
        Jisuan jisuan;//数据处理类
        
        public Chabufa(){
            super("数控插补法");
            setSize(1000,600);     
            setDefaultCloseOperation(EXIT_ON_CLOSE); 
            setVisible(true);
            //setBackground(Color.gray);
            Container content=getContentPane();
            
            Caidan dan=new Caidan();//菜单类
            setJMenuBar(dan);
            
            dangliang=new Dangliang(this,"设置当量",false);
            shijian=new Shijian(this,"间隔时间",false);
            guanyu=new Guanyu(this,"关于我们",false);
            shuru=new Shuru(this);
            jisuan=new Jisuan(shuru);
            huabu=new Huitu ();      
            huabu.jiji=jisuan;
            
            content.setLayout(new GridLayout(1,2,5,0));
            content.add(huabu);
            content.add(shuru);        
            ......
            如果需要,我把txt格式文件发给你,你用软件运行一下看看是怎么错了,谢谢
    给你一个建议吧
    content.setLayout(null);//布局管理器置空,
    大小设置为不可变。
    然后里面的两个大的组件用setBounds来设置绝对坐标。两个组件评分frame
    你看这样是否还重叠,如果不会,那么就是你布局管理器的问题,如果会,那么就是你大组件下小组件的重叠问题
    不能,我试了一下,所有组件都没了,就剩一个框架(菜单还在)了
      

  6.   

    哥哥姐姐们,代码过多不能在这儿展示,我粘贴到TXT文档上传到我的资源里,请屈驾到小弟资源处下载,用软件试一试,帮忙解开这个谜吧,谢谢