绘图时很奇怪覆盖现象,苦闷好久,求救!谢谢!
我做一个演示插补法的程序,框架里有两个面板,左面板用于绘图,右面板用于采集输入,问题有: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 界面 --------------------编程问答-------------------- 在相同的一个点处如果有两个控件同时处于显示状态,但是页面只能显示一个。那么GUI会怎么处理呢?
一般情况下是先添加的组件覆盖后添加的组件。但是如果第二个组件有调用的话好像第二个组件就显示出来了。。
所以我的做法一般是尽量让两个组件之间相互不覆盖。即使覆盖,也尽量把一个的背景设为透明色。 --------------------编程问答-------------------- 这当初我学C#的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格式文件发给你,你用软件运行一下看看是怎么错了,谢谢 --------------------编程问答--------------------
给你一个建议吧
content.setLayout(null);//布局管理器置空,
大小设置为不可变。
然后里面的两个大的组件用setBounds来设置绝对坐标。两个组件评分frame
你看这样是否还重叠,如果不会,那么就是你布局管理器的问题,如果会,那么就是你大组件下小组件的重叠问题 --------------------编程问答--------------------
在相同的一个点处如果有两个控件同时处于显示状态,但是页面只能显示一个。那么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格式文件发给你,你用软件运行一下看看是怎么错了,谢谢
给你一个建议吧
content.setLayout(null);//布局管理器置空,
大小设置为不可变。
然后里面的两个大的组件用setBounds来设置绝对坐标。两个组件评分frame
你看这样是否还重叠,如果不会,那么就是你布局管理器的问题,如果会,那么就是你大组件下小组件的重叠问题
不能,我试了一下,所有组件都没了,就剩一个框架(菜单还在)了 --------------------编程问答-------------------- 哥哥姐姐们,代码过多不能在这儿展示,我粘贴到TXT文档上传到我的资源里,请屈驾到小弟资源处下载,用软件试一试,帮忙解开这个谜吧,谢谢
补充:Java , Java SE