当前位置: 代码迷 >> Java相关 >> [求助]java语言的布局管理器和组件位置Location方法的调用
  详细解决方案

[求助]java语言的布局管理器和组件位置Location方法的调用

热度:105   发布时间:2007-04-28 22:33:44.0
[求助]java语言的布局管理器和组件位置Location方法的调用
我个人写了一个小程序,输出一串彩色字符,字符的三色对比数值要求接受键盘的输入,但是在程序中设置了布局管理器,彩色字符串就可以显示,但是字符串的位置设定却没有任何的效果,如果取消了布局管理器,彩色字符串根本就不会显示出来,每次运行程序时就只有一个空空的窗口,请高手知道小弟,怎样才能既让彩色字符串显示出来,有能随意控制字符串所在窗口中的位置。(注:我是用的标签组件设置的彩色字符串),下面是小弟的程序。
import java.io.*;
import java.awt.*;
import java.awt.event.*;
public class CaiZi{
public void CaiZi(int a,int b,int c){
Frame g=new Frame("彩色字框");
g.setBackground(new Color(40,255,60));
g.setForeground(new Color(a,b,c));
g.setLayout(new FlowLayout());
g.setSize(500,200);
Font f=new Font("楷体",Font.BOLD,40);
Label h=new Label("这是我的第一个GUI程序");
h.setLocation(20,100);
g.add(h);
h.setFont(f);
h.setVisible(true);
g.setVisible(true);
g.addWindowListener(new WindowAdapter()
{public void windowClosing(WindowEvent e)
{System.exit(0);}});
}
public static void main(String[] args){
BufferedReader br;
String str;
int[] data=new int[3];
System.out.println("请输入三色的配比数据");
for(int i=0;i<3;){
try{
br=new BufferedReader(new InputStreamReader(System.in));
str=br.readLine();
data[i]=Integer.parseInt(str);
if(data[i]<=255){i++;}
else{System.out.println("你输入的数据有误,请重新输入数据");}
continue;
}
catch(IOException e){System.out.println(e);}
}
CaiZi op=new CaiZi();
op.CaiZi(data[0],data[1],data[2]);
}
}


请各位高手们帮忙,这个问题困扰了小弟好多天了,小弟的好几个程序都有这个问题,有谁能帮我解决,小弟不胜感激。
搜索更多相关的解决方案: Location  java  管理器  组件  语言  

----------------解决方案--------------------------------------------------------
public void CaiZi(int a,int b,int c)
构造函数使没有返回类型的啊
----------------解决方案--------------------------------------------------------

用setLocation前先setLayout(null),这样才有效。


----------------解决方案--------------------------------------------------------
加上返回类型也不行啊,楼上的大哥,教教小弟,具体该怎么做啊
----------------解决方案--------------------------------------------------------
三楼的朋友,我就是说得那个问题啊,先设置了取消布局管理器的话,输出的只有一个空空的窗口了,彩色字符串根本就没有,或者说根本就没有添加的组件,我用其他的组件试过,窗口里同样不会有任何组件出现。
----------------解决方案--------------------------------------------------------
你的代码没有错呀,你的JDK是什么版本?
----------------解决方案--------------------------------------------------------

对不起,理解错误了


----------------解决方案--------------------------------------------------------
你的实在不想改了,重行写了一个,最简单的,还有很多可以改进的地方,比如可以添加JTextField直接在界面上进行输入要的参数。加油朋友,java不是短时间能精通的,慢慢的摸索着前进,一段时间后你会惊奇的发现自己在不知不觉中进步了!

我也是初学者,共同努力!


public class CaiZi extends JFrame{
String caizi;
int r;
int g;
int b;
int x;
int y;

//BufferedReader[] in;

CaiZi(){
setSize(500,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

input();

Container c=this.getContentPane();
c.add(new panel(r,g,b,x,y,caizi));
setVisible(true);
}

public static void main(String[] args){
new CaiZi();
}

private void input(){
System.out.println("Please input:");

try{
System.out.print("彩字:");
BufferedReader in_0=new BufferedReader(new InputStreamReader(System.in));
caizi=in_0.readLine();

System.out.print("r:");
BufferedReader in_1=new BufferedReader(new InputStreamReader(System.in));
r=Integer.parseInt(in_1.readLine());

System.out.print("g:");
BufferedReader in_2=new BufferedReader(new InputStreamReader(System.in));
g=Integer.parseInt(in_2.readLine());

System.out.print("b:");
BufferedReader in_3=new BufferedReader(new InputStreamReader(System.in));
b=Integer.parseInt(in_2.readLine());

System.out.print("x:");
BufferedReader in_4=new BufferedReader(new InputStreamReader(System.in));
x=Integer.parseInt(in_4.readLine());

System.out.print("y:");
BufferedReader in_5=new BufferedReader(new InputStreamReader(System.in));
y=Integer.parseInt(in_5.readLine());
}catch(IOException e){
System.err.println(e.getMessage());
}

}
}
class panel extends JPanel{
int r;
int g;
int b;
int x;
int y;
String str;
panel(int r,int g,int b,int x,int y, String str){
this.r=r;
this.g=g;
this.b=b;
this.x=x;
this.y=y;
this.str=str;
}
public void paintComponent(Graphics g1){
super.paintComponent(g1);
Graphics2D g2=(Graphics2D)g1;
g2.setColor(new Color(r,g,b));
g2.setFont(new Font("",Font.BOLD,40));
g2.drawString(str, x, y);
}
}
----------------解决方案--------------------------------------------------------
楼上的朋友,希望你理解了我的意思在回答好吗,我的程序本来就没有错误,我只是想知道setLocation()方法到底该如何调用,不过还是感谢你的参与讨论

[此贴子已经被作者于2007-4-29 23:57:11编辑过]



----------------解决方案--------------------------------------------------------
你取消了布局当然执行出来只有空白窗体啊,因为你没了布局,而且Container里面需要指明一个布局,如果你真的要取消布局的话,你试下用空布局试下,这样就相当于取消了布局,给你里面的组件加个坐标就OK
this.setLayout(null);
----------------解决方案--------------------------------------------------------
  相关解决方案