为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕哥6287543 2019-02-07 11:07:49
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();}}
查看完整描述

3 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

程序主类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年功力做不到的。

查看完整回答
反对 回复 2019-03-24
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

至于为什么setBounds()没有效果的原意是:
你用了setLayout(FlowLayout())。
这样一来,FlowLayout中所定义的Bounds属性会覆盖掉你自己的Bounds属性。所以你的setBounds()函数就不起作用了。

解决办法:
(1)用FlowLayout默认的Bounds属性;
(2)setLayout(null);然后再设置setBounds();
当然,第二种方法会没有布局管理器。

呵呵~~哪种方法你自己衡量一下吧!



查看完整回答
反对 回复 2019-03-24
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

setBounds()不能和布局器结合使用,用户只能使用一项,否则setBounds()就会失效

查看完整回答
反对 回复 2019-03-24
  • 3 回答
  • 0 关注
  • 2909 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信