how2j.cn

下载区
文件名 文件大小
shana.png 27k

解压rar如果失败,请用5.21版本或者更高版本的winrar

点击下载 winrar5.21

工具版本兼容问题
JAVA的图形界面下有两组控件,一组是awt,一组是swing。
一般都是使用swing


本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频



12分2秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器



关键字 简介 示例代码
JLabel
标签
示例代码
setIcon
使用JLabel显示图片
示例代码
JButton
按钮
示例代码
JCheckBox
复选框
示例代码
JRadioButton
单选框
示例代码
ButtonGroup
按钮组
示例代码
JComboBox
下拉框
示例代码
JOptionPane
对话框
示例代码
JTextField
文本框
示例代码
JPasswordField
密码框
示例代码
JTextArea
文本域
示例代码
JProgressBar
进度条
示例代码
JFileChooser
文件选择器
示例代码
示例 1 : 标签   
示例 2 : 使用JLabel显示图片   
示例 3 : 按钮   
示例 4 : 复选框   
示例 5 : 单选框   
示例 6 : 按钮组   
示例 7 : 下拉框   
示例 8 : 对话框   
示例 9 : 文本框   
示例 10 : 密码框   
示例 11 : 文本域   
示例 12 : 进度条   
示例 13 : 文件选择器   

Label用于显示文字
标签
package gui; import java.awt.Color; import javax.swing.JFrame; import javax.swing.JLabel; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); f.setLayout(null); JLabel l = new JLabel("LOL文字"); //文字颜色 l.setForeground(Color.red); l.setBounds(50, 50, 280, 30); f.add(l); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
示例 2 :

使用JLabel显示图片

edit
java GUI 显示图片是通过在label上设置图标实现的
注: 这里的图片路径是e:/project/j2se/shana.png,所以要确保这里有图片,不然不会显示
注: 图片的后缀名和真实格式,必须保持一致,否则很有可能无法正常显示。 什么意思呢?就是文件本来是jpg的,但是仅仅是把后缀名修改成了png,那么会导致显示失败。
使用JLabel显示图片
package gui; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(580, 200); f.setLayout(null); JLabel l = new JLabel(); //根据图片创建ImageIcon对象 ImageIcon i = new ImageIcon("e:/project/j2se/shana.png"); //设置ImageIcon l.setIcon(i); //label的大小设置为ImageIcon,否则显示不完整 l.setBounds(50, 50, i.getIconWidth(), i.getIconHeight()); f.add(l); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
JButton 普通按钮
按钮
package gui; import javax.swing.JButton; import javax.swing.JFrame; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); f.setLayout(null); JButton b = new JButton("一键秒对方基地挂"); b.setBounds(50, 50, 280, 30); f.add(b); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
JCheckBox 复选框

使用isSelected来获取是否选中了
复选框
package gui; import javax.swing.JCheckBox; import javax.swing.JFrame; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(580, 200); f.setLayout(null); JCheckBox bCheckBox = new JCheckBox("物理英雄"); //设置 为 默认被选中 bCheckBox.setSelected(true); bCheckBox.setBounds(50, 50, 130, 30); JCheckBox bCheckBox2 = new JCheckBox("魔法 英雄"); bCheckBox2.setBounds(50, 100, 130, 30); //判断 是否 被 选中 System.out.println(bCheckBox2.isSelected()); f.add(bCheckBox); f.add(bCheckBox2); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
JRadioButton 单选框
使用isSelected来获取是否选中了

在这个例子里,两个单选框可以被同时选中,为了实现只能选中一个,还需要用到ButtonGroup
单选框
package gui; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JRadioButton; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(580, 200); f.setLayout(null); JRadioButton b1 = new JRadioButton("物理英雄"); // 设置 为 默认被选中 b1.setSelected(true); b1.setBounds(50, 50, 130, 30); JRadioButton b2 = new JRadioButton("魔法 英雄"); b2.setBounds(50, 100, 130, 30); System.out.println(b2.isSelected()); f.add(b1); f.add(b2); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
ButtonGroup 对按钮进行分组,把不同的按钮,放在同一个分组里 ,同一时间,只有一个 按钮 会被选中
按钮组
package gui; import javax.swing.ButtonGroup; import javax.swing.JFrame; import javax.swing.JRadioButton; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(580, 240); f.setLayout(null); JRadioButton b1 = new JRadioButton("物理英雄"); b1.setSelected(true); b1.setBounds(50, 50, 130, 30); JRadioButton b2 = new JRadioButton("魔法 英雄"); b2.setBounds(50, 100, 130, 30); // 按钮分组 ButtonGroup bg = new ButtonGroup(); // 把b1,b2放在 同一个 按钮分组对象里 ,这样同一时间,只有一个 按钮 会被选中 bg.add(b1); bg.add(b2); f.add(b1); f.add(b2); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
JComboBox 下拉框
使用getSelectedItem来获取被选中项
使用setSelectedItem() 来指定要选中项
下拉框
package gui; import javax.swing.JComboBox; import javax.swing.JFrame; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(580, 240); f.setLayout(null); //下拉框出现的条目 String[] heros = new String[] { "卡特琳娜", "库奇" }; JComboBox cb = new JComboBox(heros); cb.setBounds(50, 50, 80, 30); f.add(cb); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
JOptionPane 用于弹出对话框

JOptionPane.showConfirmDialog(f, "是否 使用外挂 ?");
表示询问,第一个参数是该对话框以哪个组件对齐
JOptionPane.showInputDialog(f, "请输入yes,表明使用外挂后果自负");
接受用户的输入
JOptionPane.showMessageDialog(f, "你使用外挂被抓住! 罚拣肥皂3次!");
显示消息
对话框
package gui; import javax.swing.JFrame; import javax.swing.JOptionPane; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(580, 240); f.setLayout(null); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); int option = JOptionPane.showConfirmDialog(f, "是否 使用外挂 ?"); if (JOptionPane.OK_OPTION == option) { String answer = JOptionPane.showInputDialog(f, "请输入yes,表明使用外挂后果自负"); if ("yes".equals(answer)) JOptionPane.showMessageDialog(f, "你使用外挂被抓住! 罚拣肥皂3次!"); } } }
JTextField 输入框
setText 设置文本
getText 获取文本
JTextField 是单行文本框,如果要输入多行数据,请使用JTextArea

tfPassword.grabFocus(); 表示让密码输入框获取焦点
文本框
package gui; import java.awt.Dimension; import java.awt.FlowLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); f.setLayout(new FlowLayout()); JLabel lName = new JLabel("账号:"); // 输入框 JTextField tfName = new JTextField(""); tfName.setText("请输入账号"); tfName.setPreferredSize(new Dimension(80, 30)); JLabel lPassword = new JLabel("密码:"); // 输入框 JTextField tfPassword = new JTextField(""); tfPassword.setText("请输入密码"); tfPassword.setPreferredSize(new Dimension(80, 30)); f.add(lName); f.add(tfName); f.add(lPassword); f.add(tfPassword); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); tfPassword.grabFocus(); } }
JPasswordField 密码框
与文本框不同,获取密码框里的内容,推荐使用getPassword,该方法会返回一个字符数组,而非字符串
密码框
package gui; import java.awt.Dimension; import java.awt.FlowLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPasswordField; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); f.setLayout(new FlowLayout()); JLabel l = new JLabel("密码:"); // 密码框 JPasswordField pf = new JPasswordField(""); pf.setText("&48kdh4@#"); pf.setPreferredSize(new Dimension(80, 30)); // 与文本框不同,获取密码框里的内容,推荐使用getPassword,该方法会返回一个字符数组,而非字符串 char[] password = pf.getPassword(); String p = String.valueOf(password); System.out.println(p); f.add(l); f.add(pf); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
JTextArea:文本域。
文本框JTextField不同的是,文本域可以输入多行数据
如果要给文本域初始文本,通过\n来实现换行效果
JTextArea通常会用到append来进行数据追加
如果文本太长,会跑出去,可以通过setLineWrap(true) 来做到自动换行
文本域
package gui; import java.awt.Dimension; import java.awt.FlowLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextArea; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); f.setLayout(new FlowLayout()); JLabel l = new JLabel("文本域:"); JTextArea ta = new JTextArea(); ta.setPreferredSize(new Dimension(200, 150)); //\n换行符 ta.setText("抢人头!\n抢你妹啊抢!\n"); //追加数据 ta.append("我去送了了了了了了了了了了了了了了了了了了了了了了了了"); //设置自动换行 ta.setLineWrap(true); f.add(l); f.add(ta); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
进度条
package gui; import java.awt.Dimension; import java.awt.FlowLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JProgressBar; import javax.swing.JTextArea; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); f.setLayout(new FlowLayout()); JProgressBar pb = new JProgressBar(); //进度条最大100 pb.setMaximum(100); //当前进度是50 pb.setValue(50); //显示当前进度 pb.setStringPainted(true); f.add(pb); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
JFileChooser 表示文件选择器
使用FileFilter用于仅选择.txt文件

fc.setFileFilter(new FileFilter() {
public String getDescription() {
return ".txt";
}
public boolean accept(File f) {
return f.getName().toLowerCase().endsWith(".txt");
}
});


fc.showOpenDialog(); 用于打开文件
fc.showSaveDialog(); 用于保存文件
文件选择器
package gui; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.filechooser.FileFilter; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LOL"); f.setLayout(new FlowLayout()); JFileChooser fc = new JFileChooser(); fc.setFileFilter(new FileFilter() { @Override public String getDescription() { // TODO Auto-generated method stub return ".txt"; } @Override public boolean accept(File f) { return f.getName().toLowerCase().endsWith(".txt"); } }); JButton bOpen = new JButton("打开文件"); JButton bSave = new JButton("保存文件"); f.add(bOpen); f.add(bSave); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(250, 150); f.setLocationRelativeTo(null); f.setVisible(true); bOpen.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int returnVal = fc.showOpenDialog(f); File file = fc.getSelectedFile(); if (returnVal == JFileChooser.APPROVE_OPTION) { JOptionPane.showMessageDialog(f, "计划打开文件:" + file.getAbsolutePath()); } } }); bSave.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int returnVal = fc.showSaveDialog(f); File file = fc.getSelectedFile(); if (returnVal == JFileChooser.APPROVE_OPTION) { JOptionPane.showMessageDialog(f, "计划保存到文件:" + file.getAbsolutePath()); } } }); } }


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2020-11-28 练习四
victory0818




package GUI;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class huanghe {
	public static void main(String[] args){
		JFrame f = new JFrame("LoL");
	    f.setSize(500, 500);
	    f.setLocation(200, 200);
	    f.setLayout(null);

	    String[] str=new String[]{"地名:","公司类型:","公司名称:","老板名称:","金额:","产品:","价格计量单位:"};
	    ArrayList<JTextField> JFlist=new ArrayList<>();
	    int k=0;
    	int j=0;
	    for(int i=0;i<7;i++){
	    	JLabel label=new JLabel(str[i]);
	    	JTextField jf= new JTextField("");
	    	JFlist.add(jf);
	    	if(i%2==0){
	    		label.setBounds(80, 30+30*k, 90, 30);
	    		jf.setBounds(170,30+30*k,80,30);
	    		k++;}
	    	else{
	    		label.setBounds(250, 30+30*j, 90, 30);
		    	jf.setBounds(320,30+30*j,80,30);
		    	j++;
	    	}
	    	f.add(label);
	    	f.add(jf);
	    }
	    JButton b=new JButton("生成");
	    b.setBounds(200, 200, 80, 30);
	    JTextArea ta = new JTextArea("");
		ta.setBounds(80,250,300,200);
	    b.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				ta.setText(JFlist.get(0).getText()+"最大"+JFlist.get(1).getText()+"-"+JFlist.get(2).getText()+"倒闭了,王八蛋老板"+JFlist.get(3).getText()+"吃喝嫖赌,欠下了"+JFlist.get(4).getText()+"个亿,带着他的小姨子跑了!我们没有办法,拿着"+JFlist.get(5).getText()+"抵工资!原价都是一"+JFlist.get(6).getText()+"多、两"+JFlist.get(6).getText()+"多、三"+JFlist.get(6).getText()+"多的%s,现在全部只卖二十块,统统只要二十块!"+JFlist.get(3).getText()+"王八蛋,你不是人!我们辛辛苦苦给你干了大半年,你不发工资,你还我血汗钱,还我血汗钱");
			}
		});
	    ta.setLineWrap(true);
		f.add(ta);
	    f.add(b);
	    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    f.setVisible(true);
}
}

							


3 个答案

gacy
答案时间:2021-11-29
兄弟那么有趣

留白の
答案时间:2021-06-10
哈哈哈哈哈哈哈哈,你这也太搞笑了吧!

xian666
答案时间:2021-05-04
哈哈哈哈, ,以前好像在做过这样一道题,内容也这样,哈哈,是江南皮革厂的



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2020-04-15 厉害厉害
15218102694

站长真的是骚话一大堆呀,污哥




1 个答案

啊泽yzs
答案时间:2021-02-05
hhhhhh



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2020-02-11 文件选择器编译提示参数不适用
2019-07-18 tfPassword.grabFocus(); 表示让密码输入框获取焦点 到底有什么效果
2019-05-11 文本框和文本域问题


提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 6 条以前的提问,请 点击查看

提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 JAVA 中级-图形界面-组件 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 578362961
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图