`
空城旧梦why
  • 浏览: 25372 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Java Swing初步(三)

    博客分类:
  • Java
 
阅读更多

        学习java swing的第二节课,老师让我考虑一下计算器的界面布局,于是我花了一上午加上一个中午的时间来搭建界面,我不得不说搭界面这个活真的是需要耐心,在这个过程中出现各种问题。

        考虑win7系统的计算器,我主要将其分为两块,我直接上图来显示我的划分方式


 这是我的划分方式,下面我附上我的代码实现供大家参考,刚开始的时候代码写的很挫,按钮还是一个一个加上去的,后来为了别人然后进行了代码修改,现在条理清晰多了。

package com.why.calculator.ui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.util.ArrayList;
import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JTextField;

public class Calculator extends JFrame {

	private static final long serialVersionUID = 1L;
	private List<JButton> list;
	private JTextField show;

	public Calculator() {
		this.list = new ArrayList<JButton>();
	}

	public void init() {
		JPanel panel = new JPanel(new BorderLayout());
		panel.setOpaque(false);
		// 设置窗体大小
		this.setSize(new Dimension(228, 322));
		// 设置窗格为透明
		((JPanel) this.getContentPane()).setOpaque(false);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setTitle("计算器");
		// 设置窗体不能改变大小
		this.setResizable(false);
		// 设置背景图片
		ImageIcon bg_icon = new ImageIcon("res/bg.jpg");
		JLabel bg = new JLabel(bg_icon);
		bg.setBounds(0, 0, 228, 322);
		this.getLayeredPane().add(bg, new Integer(Integer.MIN_VALUE));
		// 设置显示位置
		this.setLocationRelativeTo(null);

		FlowLayout fl = new FlowLayout(FlowLayout.CENTER, 0, 0);
		JPanel panel1 = new JPanel(fl);
		panel1.setOpaque(false);

		// 添加菜单条,然后给每个菜单条添加下拉菜单
		JMenuBar menuBar = new JMenuBar();
		JMenu menu1 = new JMenu("查看");
		JMenu menu2 = new JMenu("编辑");
		JMenu menu3 = new JMenu("帮助");

		JRadioButtonMenuItem it1 = new JRadioButtonMenuItem("标准型", true);
		JRadioButtonMenuItem it2 = new JRadioButtonMenuItem("科学型");
		JRadioButtonMenuItem it3 = new JRadioButtonMenuItem("程序员");
		menu1.add(it1);
		menu1.add(it2);
		menu1.add(it3);

		JMenuItem copy = new JMenuItem("复制");
		JMenuItem paste = new JMenuItem("粘贴");
		menu2.add(copy);
		menu2.add(paste);

		JMenuItem helpTheme = new JMenuItem("帮助主题");
		JMenuItem about = new JMenuItem("关于本作");
		menu3.add(helpTheme);
		menu3.add(about);

		menuBar.add("查看", menu1);
		menuBar.add("编辑", menu2);
		menuBar.add("帮助", menu3);
		menu1.setBackground(new Color(225, 233, 246));
		menu2.setBackground(new Color(225, 233, 246));
		menu3.setBackground(new Color(225, 233, 246));
		menuBar.setBackground(new Color(225, 233, 246));
		menuBar.setPreferredSize(new Dimension(222, 20));
		panel1.add(menuBar);

		JLabel l = new JLabel();
		l.setPreferredSize(new Dimension(212, 6));
		panel1.add(l);

		// 设置文本输入框显示的文字的数量
		this.show = new JTextField(15);
		// 设置文本输入框的字体以及大小
		this.show.setFont(new Font("Consolas", Font.BOLD, 23));
		// 设置文本输入框的文字靠右显示
		this.show.setHorizontalAlignment(JTextField.SOUTH_EAST);
		// 设置文本框大小
		this.show.setPreferredSize(new Dimension(192, 50));
		// 设置文本框的背景色
		this.show.setBackground(Color.WHITE);
		// 设置默认的文本
		this.show.setText("0");
		// 设置光标的颜色和文本框颜色相同达到不显示的目的
		this.show.setCaretColor(this.show.getBackground());
		// 设置光标的位置
		this.show.setCaretPosition(this.show.getText().length());
		// 添加文本输入框
		panel1.add(show);
		panel1.setPreferredSize(new Dimension(222, 82));

		this.add(panel1, BorderLayout.NORTH);

		createAbove(panel);
		createBehind(panel);
		this.add(panel, BorderLayout.CENTER);
		this.setVisible(true);
		System.out.println(list.size());
	}

	/**
	 * 初始化计算器上面部分的组件
	 * @param panel : 要添加到的目的容器
	 */
	private void createAbove(JPanel panel) {
		String[] s = new String[] { "MC", "MR", "MS", "M+", "M-", "backspace",
				"CE", "C", "+-", "sqrt", "7", "8", "9", "div", "%", "4", "5",
				"6", "mul", "recNum" };
		JPanel panel_above = new JPanel(new FlowLayout(FlowLayout.CENTER, 6, 5));
		addButtonToPanel(s, panel_above);
		panel_above.setOpaque(false);
		panel_above.setPreferredSize(new Dimension(228, 130));
		panel.add(panel_above, BorderLayout.NORTH);
	}

	/**
	 * 初始化计算器下面面部分的组件
	 * @param panel : 要添加的目的容器
	 */
	private void createBehind(JPanel panel) {
		// 左边的第一行区域
		JPanel panel_behind_left_line1 = new JPanel(new FlowLayout(
				FlowLayout.LEFT, 6, 5));
		String[] s1 = new String[] { "1", "2", "3", "-" };
		// 向左边第一行区域添加组件
		addButtonToPanel(s1, panel_behind_left_line1);
		// 设置透明
		panel_behind_left_line1.setOpaque(false);

		// 左边的第二行区域
		JPanel panel_behind_left_line2 = new JPanel(new FlowLayout(FlowLayout.LEFT, 6, 5));
		String[] s2 = new String[] { "0", "dot", "+" };
		addButtonToPanel(s2, panel_behind_left_line2);

		// 实例化一个JPanel容器用于装载右边的等号按钮
		JPanel panel_behind_left_right = new JPanel(new FlowLayout(FlowLayout.LEFT));
		// 添加等号按钮
		String[] s3 = new String[] { "equal" };
		addButtonToPanel(s3, panel_behind_left_right);
		
		panel_behind_left_right.setOpaque(false);
		
		JPanel panel_behind_left = new JPanel(new GridLayout(2, 1, 6, -4));
		// 将第一行添加到下面左下角的区域中
		panel_behind_left.add(panel_behind_left_line1);
		// 将第二行添加到下面左下角的区域中
		panel_behind_left.add(panel_behind_left_line2);
		// 设置透明
		panel_behind_left.setOpaque(false);
		panel_behind_left_line2.setOpaque(false);
		// 实例化一个JPanel容器用于装载下面的两个大的区域
		JPanel panel_behind = new JPanel(new FlowLayout(FlowLayout.CENTER, -5, 0));
		// 实例化一个JPanel容器用于装载左边的两行区域
		panel_behind.add(panel_behind_left);
		panel_behind.add(panel_behind_left_right);
		// 设置容器为透明用以显示背景色
		panel_behind.setOpaque(false);
		// 将下面的区域添加到边框布局的中间部分
		panel.add(panel_behind, BorderLayout.CENTER);
	}

	private void addButtonToPanel(String[] s, JPanel panel) {
		// 添加左边的第一行的组件
		for (String string : s) {
			String path = "res/" + string + ".jpg";
			// 载入按钮的图片资源
			ImageIcon icon = new ImageIcon(path);
			// 实例化一个按钮对象
			JButton button = new JButton(icon);
			// 设置按钮的大小
			button.setPreferredSize(new Dimension(icon.getIconWidth(), icon
					.getIconHeight()));
			// 将按钮添加进入list中
			list.add(button);
			// 将按钮添加进入左边第一行的容器对象中
			panel.add(button);
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Calculator calculator = new Calculator();
		calculator.init();
	}

}

 这个是我的效果图吐舌头



 

  • 大小: 34.9 KB
  • 大小: 116.4 KB
分享到:
评论

相关推荐

    使用Java Swing实现了抖音上的表白程序

    最后,作者想说的是,1.9块钱的资源,你买不了吃亏,买不了上当,只需省一片绿箭口香糖的钱,你就能拥有一个用于整蛊的Java Swing实现,你在玩的过程中,还可以初步了解一些Java Swing的知识,如此说来,少年,抓紧时间下载吧。

    服装销售系统java swing

    《基于Java Swing的服装销售系统详解》 在IT领域,开发用户友好的应用程序是至关重要的。对于初学者来说,理解并应用面向对象编程思想、掌握GUI(图形用户界面)设计以及数据库管理是基础技能的基石。本文将深入...

    java swing DVD租赁系统.zip_swing程序设计

    Java Swing DVD租赁系统是一个基于Java Swing图形用户界面(GUI)技术构建的应用程序,它主要用于管理DVD的出租业务。Swing是Java的一个库,用于创建桌面应用程序,提供了丰富的组件集,如按钮、文本框、菜单等,使...

    Java Swing组件写的游戏客户端.zip

    Java Swing组件写的游戏客户端 Java Swing是Java标准库中的一个图形用户界面(GUI)工具包,用于构建桌面应用程序。在这个特定的项目中,"Java Swing组件写的游戏客户端" 暗示了一个基于Java Swing开发的游戏客户端...

    javaSwing双色球软件设计思路及初步源码

    Java Swing 是Java GUI(图形用户界面)开发的一个重要框架,它是Java Foundation Classes (JFC) 的一部分,提供了丰富的组件库来构建桌面应用。本项目是一个基于Java Swing开发的双色球彩票软件,让我们来深入探讨...

    java swing计算器

    Java Swing计算器是一个基于Java GUI库Swing开发的桌面应用程序,用于执行基本和科学计算操作。Swing是Java标准版(Java SE)的一部分,提供了一套丰富的组件和工具,用于创建美观且功能丰富的用户界面。本项目实现...

    自己用Java Swing开发的一个图像处理软件(源码)

    标题中的“自己用Java Swing开发的一个...提供的源码可供学习者了解如何使用Java和Swing创建桌面应用,以及如何初步处理图像。由于代码的开源性质,开发者和学习者可以在此基础上添加自己的图像处理算法,扩展其功能。

    Java Swing图形用户界面设计(I)

    本实验旨在让学生初步掌握使用Java Swing进行界面设计的基本技巧。 在实验内容中,包含了以下几个部分: 1. **闰年判断**: 通过输入一个年份,程序会判断该年份是否为闰年。闰年的判断条件是:能被4整除但不能被...

    开发了一款基于JAVA Swing的简单人机对战斗地主游戏。.zip

    在课程设计或毕业设计中,这样的项目有助于学生巩固Java编程基础,学习GUI设计,理解面向对象编程,以及初步涉猎游戏开发和人工智能。对于初学者来说,通过阅读和分析源代码,可以提升问题解决能力,了解实际项目...

    java图形初步建立

    在"java图形初步建立"中,我们可能会从创建一个简单的`MyFrame`类开始,这个类继承自`javax.swing.JFrame`。`JFrame`是Swing中的主要窗口类,可以承载其他组件。以下是一个基础的`MyFrame`类示例: ```java import ...

    Java 写的斗兽棋

    在这个特定的案例中,"Java 写的斗兽棋" 是一个初学者用Java实现的小游戏,这表明你正在探索Java的基础和游戏开发的初步概念。 斗兽棋,又称兽棋,是一种两人对弈的策略棋类游戏,其规则相对简单,但包含了基础的...

    基于Java+Swing实现计算器

    在本文中,我们将深入探讨如何使用Java编程语言和Swing GUI库来实现一个功能丰富的计算器,包括基础的计算功能以及保存计算过程的能力。这个项目旨在提高开发者对Java面向对象编程的理解,以及对Swing组件的运用技巧...

    java Swing校园卡管理系统

    图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理,现今,有很多的图书馆都是初步开始使用,甚至尚未使用计算机进行信息管理。根据调查得知,他们以前对信息管理的主要方式是基于...

    javaswing简单源码-FrogHop:一个简单的基于Javaswing的游戏。与Frogger类似。(Java源代码和文档)

    《基于Java Swing的游戏开发——FrogHop解析》 在Java编程世界中,Swing库是用于构建图形用户界面(GUI)的重要工具。本项目“FrogHop”是一个使用Java Swing开发的简单游戏,其灵感来源于经典游戏Frogger。本文将...

    java编写的计算器(初步理解GUI布局)

    Swing是Java的一个库,提供了丰富的组件用于构建桌面应用程序的用户界面。 实验要求创建一个简单的计算器,这涉及到以下几个关键知识点: 1. **Swing组件**:实验中用到了`JFrame`作为主窗口,`JPanel`作为容器,`...

    Java Swing图形用户界面设计(II)

    初步掌握JAVA的继承和接口。 2【实验内容】 1.实现一个名为Person的类和它的子类Employee,Employee有两个子类Faculty和Staff。具体要求如下: (1)Person类中的属性有:姓名name(String类型),地址address...

    java初步学习指导

    - Java2 技术平台分为三个版本:Java Standard Edition (J2SE),主要用于桌面应用;Java Enterprise Edition (J2EE),用于企业级应用;Java Micro Edition (J2ME),适用于嵌入式设备和移动应用。 3. **获取与安装 ...

    Java游戏编程初步3.rar_Java游戏_java 游戏

    标题“Java游戏编程初步3”表明这是一个系列教程的第三部分,可能涵盖了一些进阶的主题,比如游戏循环、碰撞检测或对象动画。这部分教程可能是前两部分基础知识的延续,如变量、条件语句、循环和面向对象编程的巩固...

    Java游戏编程初步

    Java游戏编程初步是一个适合初学者入门的专题,旨在引导学习者掌握使用Java语言进行游戏开发的基本概念和技术。在Java这个强大的编程平台上,游戏编程提供了一种有趣的实践方式,让开发者可以充分发挥自己的创造力和...

    华育国际java初步课间及课上练习

    【华育国际java初步课间及课上练习】是一份针对初学者的Java编程学习资料,主要涵盖了J2SE(Java Standard Edition)的基础知识和实际编程练习。这份资源结合了华育国际教育机构的课堂讲解内容和教师编写的程序实例...

Global site tag (gtag.js) - Google Analytics