java图形界面 setBounds()函数怎么没有效果呢?

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.FlowLayout;
import java.io.*;
public class MainFrame extends JFrame {

/**
* @param args
*/

JLabel Lab1,Lab2,Lab3,Lab4,Lab5,Lab6,Lab7;

JTextField Tex1,Tex2,Tex3,Tex4,Tex5;

JComboBox Comb1,Comb2,Comb3;

JButton Btn1,Btn2,Btn3;
JFrame frame=new JFrame("矩阵计算器");

JPanel panel;

public void mainframe()
{

Container cont=getContentPane();
cont.setLayout(new FlowLayout());
cont.setBackground(Color.blue);

String names1[]={"单目运算","双目运算","解线性方程(只有一解)"};
Lab1=new JLabel("矩阵计算器");
cont.add(Lab1);
Lab1.setBounds(300,20,400,40);

Lab2=new JLabel("请选择你要进行的矩阵运算:");
cont.add(Lab2);
Lab2.setBounds(30,60,400,40);

Comb1=new JComboBox(names1);
cont.add(Comb1);

Lab3=new JLabel("行");
cont.add(Lab3);

setVisible(true);
setSize(800, 600);
setLocation(300,20);

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

MainFrame a=new MainFrame();
a.mainframe();
}

}

慕哥6287543
浏览 2910回答 3
3回答

慕姐8265434

程序主类MainFrame继承自JFrame,然后又来了个成员JFrame frame;,你到底想用谁来显示?如果主类继承自JFrame,一般情况下在main函数中new 一个主类实例就可以了,这个实例就是个JFrame,可以作为主界面。如果主类没有继承自JFrame,那需要在类成员里设置一个JFrame型的成员,new之,再setVisible(true)之。你全做了。。。。你的mainframe()函数用的反倒还是父类JFrame的功能。那你的那个JFrame型的frame做什么用的?至于你提的问题,你已经将窗口设置为FlowLayout布局了,那么就得按FlowLayout的规则去设置界面。在FlowLayout布局下,每个组件的大小是自动取最合适(其实是最合适的小)的。你自己调用的setSize、setLocation、setBounds都不会有效的。这三个函数只在自定义布局下有效,也就是:先setLayout(null)l;,但这样一来,你所有其它组件也必须使用这三个函数设置大小和位置了,很麻烦。java中的布局不是那么简单的。如果单做代码就想构造好界面,没有2、3年功力做不到的。

红颜莎娜

至于为什么setBounds()没有效果的原意是:你用了setLayout(FlowLayout())。这样一来,FlowLayout中所定义的Bounds属性会覆盖掉你自己的Bounds属性。所以你的setBounds()函数就不起作用了。解决办法:(1)用FlowLayout默认的Bounds属性;(2)setLayout(null);然后再设置setBounds();当然,第二种方法会没有布局管理器。呵呵~~哪种方法你自己衡量一下吧!

扬帆大鱼

setBounds()不能和布局器结合使用,用户只能使用一项,否则setBounds()就会失效
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Cocos2d-x