绘图时很奇怪覆盖现象,苦闷好久,求救!谢谢!

小菜问路 2013-06-07 08:28:26
我做一个演示插补法的程序,框架里有两个面板,左面板用于绘图,右面板用于采集输入,问题有:
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]);
}
}
}
...全文
101 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
小菜问路 2013-06-08
  • 打赏
  • 举报
回复
哥哥姐姐们,代码过多不能在这儿展示,我粘贴到TXT文档上传到我的资源里,请屈驾到小弟资源处下载,用软件试一试,帮忙解开这个谜吧,谢谢
小菜问路 2013-06-08
  • 打赏
  • 举报
回复
引用 4 楼 AA5279AA 的回复:
[quote=引用 3 楼 u010994470 的回复:] [quote=引用 1 楼 AA5279AA 的回复:] 在相同的一个点处如果有两个控件同时处于显示状态,但是页面只能显示一个。那么GUI会怎么处理呢? 一般情况下是先添加的组件覆盖后添加的组件。但是如果第二个组件有调用的话好像第二个组件就显示出来了。。 所以我的做法一般是尽量让两个组件之间相互不覆盖。即使覆盖,也尽量把一个的背景设为透明色。
我的代码粘少了,你可能没发现,我的左右面板是分开的,各占一半,应该不会重叠呀 //主类的构造函数部分代码 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格式文件发给你,你用软件运行一下看看是怎么错了,谢谢[/quote] 给你一个建议吧 content.setLayout(null);//布局管理器置空, 大小设置为不可变。 然后里面的两个大的组件用setBounds来设置绝对坐标。两个组件评分frame 你看这样是否还重叠,如果不会,那么就是你布局管理器的问题,如果会,那么就是你大组件下小组件的重叠问题[/quote] 不能,我试了一下,所有组件都没了,就剩一个框架(菜单还在)了
失落夏天 2013-06-08
  • 打赏
  • 举报
回复
引用 3 楼 u010994470 的回复:
[quote=引用 1 楼 AA5279AA 的回复:] 在相同的一个点处如果有两个控件同时处于显示状态,但是页面只能显示一个。那么GUI会怎么处理呢? 一般情况下是先添加的组件覆盖后添加的组件。但是如果第二个组件有调用的话好像第二个组件就显示出来了。。 所以我的做法一般是尽量让两个组件之间相互不覆盖。即使覆盖,也尽量把一个的背景设为透明色。
我的代码粘少了,你可能没发现,我的左右面板是分开的,各占一半,应该不会重叠呀 //主类的构造函数部分代码 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格式文件发给你,你用软件运行一下看看是怎么错了,谢谢[/quote] 给你一个建议吧 content.setLayout(null);//布局管理器置空, 大小设置为不可变。 然后里面的两个大的组件用setBounds来设置绝对坐标。两个组件评分frame 你看这样是否还重叠,如果不会,那么就是你布局管理器的问题,如果会,那么就是你大组件下小组件的重叠问题
小菜问路 2013-06-08
  • 打赏
  • 举报
回复
引用 1 楼 AA5279AA 的回复:
在相同的一个点处如果有两个控件同时处于显示状态,但是页面只能显示一个。那么GUI会怎么处理呢? 一般情况下是先添加的组件覆盖后添加的组件。但是如果第二个组件有调用的话好像第二个组件就显示出来了。。 所以我的做法一般是尽量让两个组件之间相互不覆盖。即使覆盖,也尽量把一个的背景设为透明色。
我的代码粘少了,你可能没发现,我的左右面板是分开的,各占一半,应该不会重叠呀 //主类的构造函数部分代码 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格式文件发给你,你用软件运行一下看看是怎么错了,谢谢
逍遥jc 2013-06-07
  • 打赏
  • 举报
回复
这当初我学C#的GUI的时候也遇到过类似问题。
失落夏天 2013-06-07
  • 打赏
  • 举报
回复
在相同的一个点处如果有两个控件同时处于显示状态,但是页面只能显示一个。那么GUI会怎么处理呢? 一般情况下是先添加的组件覆盖后添加的组件。但是如果第二个组件有调用的话好像第二个组件就显示出来了。。 所以我的做法一般是尽量让两个组件之间相互不覆盖。即使覆盖,也尽量把一个的背景设为透明色。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧