初学 AWT 有些问题

纵骑横飞 2016-11-01 12:41:56
package com.langsin.Game.Demo1;

import java.awt.Choice;
import java.awt.Font;
import java.awt.TextField;
import java.io.File;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class FrameOutOfGame {

public static void main(String[] args) {
JFrame jf = new JFrame("欢迎来到**");

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
jf.setBounds(100, 20, 600, 700);
jf.setLayout(null);
// jf.setResizable(false);

// 加入背景图
ImageIcon ii = new ImageIcon("./background.jpg");
JLabel jl = new JLabel(ii);
jl.setIcon(ii);
jl.setBounds(0, 0, jf.getWidth(), jf.getHeight());// 这个就是绝对布局

//jp2
JPanel jp2=new JPanel();
jp2.setBounds(0, 0, jf.getWidth(), jf.getHeight());

jp2.add(jl);

jf.add(jp2);




// 透明 的图 JPanel 防止Label被覆盖
JPanel jp = new JPanel();
// jp.setOpaque(true);
jp.setBounds(0, 0, jf.getWidth(), jf.getHeight());
jp.setLayout(null);

// 设置字体
Font font = new Font("楷体", Font.BOLD, 15);

// 人物1 标签 Label
JLabel lb1 = new JLabel("玩家1");
lb1.setBounds(30, 50, 50, 20);
lb1.setFont(font);

// 用户名1 Label
JLabel lb1_u = new JLabel("玩家1用户名:");
lb1_u.setBounds(120, 50, 100, 20);
lb1_u.setFont(font);

// 用户1文本区 TextField
TextField tf1 = new TextField("玩家1");
tf1.setBounds(230, 50, 150, 20);

// 人物选择1 Label
JLabel lb1_ps = new JLabel("人物选择:");
lb1_ps.setBounds(120, 105, 80, 20);
lb1_ps.setFont(font);

// 下拉框1 Choice
Choice c1 = new Choice();
c1.setBounds(230, 105, 150, 20);
c1.addItem("人物1 ");

// 玩家2 选择标签 Label
JLabel lb2 = new JLabel("玩家2");
lb2.setBounds(30, 170, 60, 20);
lb2.setFont(font);
lb2.setFont(font);

// 用户名2文本区 TextField
TextField tf2 = new TextField("玩家2");
tf2.setBounds(230, 170, 150, 20);

// 用户名2 Label
JLabel lb2_u = new JLabel("玩家2用户名:");
lb2_u.setBounds(120, 170, 150, 20);
lb2_u.setFont(font);

// 人物选择2 Label
JLabel lb2_ps = new JLabel("人物选择:");
lb2_ps.setBounds(120, 235, 80, 20);
lb2_ps.setFont(font);

// 下拉2 Choice
Choice c2 = new Choice();
c2.setBounds(230, 235, 150, 20);
c2.addItem("人物1 ");

// 场景选择
JLabel lb_sc = new JLabel("场景选择:");
lb_sc.setBounds(30, 355, 80, 20);
lb_sc.setFont(font);

// 添加
jp.add(lb1);
jp.add(lb1_ps);
jp.add(lb2);
jp.add(lb2_ps);
jp.add(lb1_u);
jp.add(lb2_u);
jp.add(lb_sc);
jp.add(tf1);
jp.add(tf2);
jp.add(c1);
jp.add(c2);

jf.add(jp);

}

}


第一问: 为什么 文字被覆盖了而文本框没被覆盖 ? 我错在哪?

第二问: 为什么 有时候一出来 很多东西都不会出来 ,要放大/缩小 触发某种事件 才能正确显示?


知之者答,不知者着好自为之 回答价值标记给分




...全文
194 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
纵骑横飞 2016-11-01
  • 打赏
  • 举报
回复
注意 设置透明 的注释是我后来加上去的,大家改回来就OK
weixin_36584646 2016-11-01
  • 打赏
  • 举报
回复
jf.setVisible(true); 这句话放到最后,,,这个方法就是加载你这些东西的方法,,你放在前面了之后,刚开始不显示,但是你动了界面之后,会重新调用这个方法,所以就显示了

62,626

社区成员

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

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