`

Swing界面布局之代码手写一, 计算器layout实现

阅读更多
很多人认为Swing的布局设计很难, 其实并不然
一方面是教科书的误导
另一方面是Swing的布局思想比较先进, 理解了, 你就会喜欢上它

这篇贴子, 先讲简单的, 也是许多人学习swing时最想做的事, 我希望像VS一样设计Layout
要在Swing里实现这个, 其实很简单, 只须要轻轻地告诉swing, 我的layout为null即可
可惜, 读了好多本swing的书, 都没有比较仔细的例子, 只有简单地说一下(一小段文字)

下面是用swing做的一个计算器demo, 只有layout, 没有功能实现




既然是手写代码, 当然是简洁喽, 不像IDE生成的一大堆不明所以的代码


	public CalculatorView() {
		frame=new JFrame("计算器");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);		//退出窗口时关闭线程
		frame.setBounds(200, 200, 300, 250);				//初始位置和大小
		frame.setResizable(false);					//不能放大
		container=frame.getContentPane();				//指定container
		container.setLayout(null);					//像VS一样的布局,简单实现
		setLookAndFeel();						//XP style的layout
		addComponent();							//添加控件
		frame.setVisible(true);						//最后把窗口显示出来
	}


添加控件: 菜单, 结果文本框, 按钮
	void addComponent(){
		addMenu();						//添加菜单栏
		addResultText();					//添加结果显示文本框
		addButtonGroup();					//添加按钮

		container.setBackground(new Color(236,233,216));	//调整面板颜色一致
		JSeparator sep1=new JSeparator();			//菜单栏下面的分隔线
		sep1.setBounds(0, 30, 300, 1);
		sep1.setForeground(Color.WHITE);
		container.add(sep1);
	}


菜单和结果文本框比较简单, 不贴上来, 下面的按钮的
	void addButtonGroup(){
		JPanel panBtn=new JPanel(null);			//所有的按钮都加在这个panel里
		panBtn.setBounds(0, 65, 300, 200);
		JButton btnBS=new JButton("Backspace");		//backspace,CE,C三个按钮单独添加
		btnBS.setBounds(60, 5, 80, 25);
		panBtn.add(btnBS);				//new BtnUI()
		btnBS.setUI(new BtnUI());			//由于swing的文字渲染要求按钮
		JButton btnCE=new JButton("CE");		//要很多的横向空间, 所以只好
		btnCE.setBounds(150, 5, 60, 25);		//自己override文字渲染function
		panBtn.add(btnCE);
		JButton btnC=new JButton("C");
		btnC.setBounds(220, 5, 60, 25);
		panBtn.add(btnC);
		
		String[] btnName={
			"MC", "7", "8", "9", "/", "sqrt"
			,"MR", "4", "5", "6", "*", "%"
			,"MS", "1", "2", "3", "-", "1/x"
			,"M+", "0", "+/-", ".", "+", "="
		};
		JButton[] btns=new JButton[24];
		int i=0;
		int oriX=15;
		int oriY=35;
		int btnW=40;
		int btnH=25;
		for(JButton btn : btns){
			btn=new JButton();
			btns[i]=btn;
			int x=(i%6)*(btnW+5)+oriX;
			int y=(i/6)*(btnH+5)+oriY;
			x=(i%6==0)?x-10:x;		//add sep sapce more
			btn.setText(btnName[i++]);
			btn.setUI(new BtnUI());
			btn.setForeground(Color.blue);
			btn.setBounds(x, y, btnW, btnH);
			panBtn.add(btn);
		}
		//set some button color to red
		int red[]={0, 6, 12, 18, 4, 10, 16, 22, 23};
		for(int n : red){
			btns[n].setForeground(Color.RED);
		}
		btnBS.setForeground(Color.RED);
		btnCE.setForeground(Color.RED);
		btnC.setForeground(Color.RED);
		container.add(panBtn);					//panel加进container容器里
	}


BtnUI(),
由于swing的文字渲染要求按钮, 要很多的横向空间, 所以只好自己override文字渲染function
class BtnUI extends WindowsButtonUI {

		@Override
		protected void paintText(Graphics g, AbstractButton b, Rectangle textRect, String text) {
			textRect.width=40;
			text=b.getText();
//			FontMetrics fm=SwingUtilities2.getFontMetrics(b, g);		//source code method
			FontMetrics fm=Toolkit.getDefaultToolkit().getFontMetrics(b.getFont());
			int w=fm.stringWidth(text);
			int x=(b.getWidth()-w)/2;
			int y=17;
			g.setColor(b.getForeground());
//			SwingUtilities2.drawString(b, g, text, x, y);				//source code method
			g.drawString(text, x, y);
		}
	}


以上, 只有178行, 够简洁吧, 其实主要不是在乎行数的多少, 而是受不了IDE生成的一大堆代码
而且, 自己写, 结构能控制得更好

  • 大小: 78.9 KB
分享到:
评论
4 楼 pywepe 2010-12-29  
确实要好好学swing的layout
3 楼 lzj0470 2010-12-28  
跟你的差不多,你只是没有加图片而已。
2 楼 伊苏 2010-12-28  
看了, 只有界面, 没有代码, 能说说你的实现思路?
1 楼 lzj0470 2010-12-27  
看看这个怎么样
http://lzj0470.iteye.com/blog/850634

相关推荐

    Swing版简单计算器

    Swing版的简单计算器,实现加减乘除,第一次写,希望大家给点建议。

    Java swing编写的计算器界面.zip

    本压缩包"Java swing编写的计算器界面.zip"包含了用Java Swing实现的计算器的源代码示例,以及相关文档,帮助开发者理解如何利用Swing构建这样的应用。 首先,让我们深入了解一下Java Swing。Swing是基于Java AWT...

    JavaSwing实现简单计算器

    本项目"JavaSwing实现简单计算器"就是利用这些组件来创建一个功能基础的计算器应用,可以处理基本的数学运算,包括加、减、乘、除,同时也支持负数、小数以及括号的使用。下面我们将详细探讨实现这样一个计算器所需...

    基于Java swing组件实现简易计算器

    "基于Java swing组件实现简易计算器...本文主要介绍了基于Java swing组件实现简易计算器的知识点,包括JFrame、JButton、JPanel、JTextArea、GridLayout等组件的使用, serta事件处理、布局管理器、代码优化等知识点。

    swing计算器,swing计算器 swing计算器

    本项目的核心在于利用Swing组件来创建一个功能齐全的计算器界面,并实现基本的数学运算。 在Swing计算器中,开发者会使用诸如JButton、JFrame、JPanel等Swing组件来构建计算器的外观。JFrame作为主窗口,承载着整个...

    简单的计算器(java.swing界面实现)

    在本项目中,我们讨论的是一个基于Java Swing库构建的简单计算器应用。这个计算器能够执行基本的算术运算,如加、减、乘、除,还包括开方、求模和求倒数等进阶功能。以下是对这个项目的详细分析: **Java Swing库...

    Swing实现一个简单的计算器

    这个示例展示了如何使用 Swing 来实现一个简单的计算器。我们使用了多种 Swing 组件、布局管理器和事件监听来实现这个示例。这个示例展示了 Swing 的一些优点,例如易于使用的组件和灵活的布局管理。

    Java计算器源代码 awt+swing图形界面

    Java 计算器源代码 awt+swing 图形界面是一款使用 Java 语言开发的图形化计算器应用程序,采用了 AWT 和 Swing 库来实现图形用户界面。下面是该计算器的主要知识点: 1. AWT 和 Swing 库:AWT(Abstract Window ...

    swing-layout-1.0.3

    swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3...

    利用网格布局写的一个java计算器

    本项目利用Java的Swing库,通过网格布局(Grid Layout)设计了一个简单的计算器。Swing是Java标准版(Java SE)的一部分,提供了丰富的组件库来构建图形用户界面。网格布局是一种将容器划分为等大小网格的布局管理器...

    java中关于swing的应用实例(计算器界面)

    在"java中关于swing的应用实例(计算器界面)"这个项目中,我们很可能会看到如何使用Swing组件来创建一个类似实际计算器的布局和功能。 首先,我们会使用JFrame作为主窗口,它是所有Swing应用程序的基础。然后,...

    简单计算器的实现源代码

    这个简单的计算器程序是用Java语言编写的,基于Swing库构建GUI(图形用户界面)。首先,我们来看一下主要的类`Calculator1`,它继承自`JFrame`,并且实现了`ActionListener`接口,这意味着它能够处理按钮点击事件。 ...

    Java的Swing组件实现的计算器,Java入门学习案例,源码.rar

    这个“Java的Swing组件实现的计算器”是一个典型的Java初学者项目,用于帮助开发者了解如何使用Swing来构建桌面应用程序。下面将详细阐述Swing组件以及在创建计算器应用中的关键知识点。 首先,Swing提供了丰富的...

    j2se实现计算器,界面优美

    总结一下,这个J2SE计算器项目是Java Swing GUI编程的一个示例,展示了如何创建一个具有美观界面的计算工具。通过学习这个项目,初学者可以了解如何设计GUI,处理事件,以及实现基本的数学运算。同时,项目的源代码...

    java swing 实现计算器源码

    在这个"java swing 实现计算器源码"项目中,开发者使用Swing构建了一个计算器应用程序,尽管未经过全面测试,但理论上应该能够正常运行。 Swing 提供了一系列的组件,如 JButton、JLabel、JTextField 等,这些组件...

    java实现的计算器(界面程序)

    本项目名为“java实现的计算器(界面程序)”,使用了Java Swing库来构建计算器的界面,并采用了GridBagLayout布局管理器来优化组件的摆放,以实现一个美观且功能齐全的计算器。 Java Swing是Java AWT(抽象窗口...

    TDD之Swing一个另类的计算器实现心得

    标题中的"TDD之Swing一个另类的计算器实现心得"表明了这篇博文是关于使用测试驱动开发(Test-Driven Development, TDD)方法来构建一个基于Java Swing的计算器应用的心得体会。在TDD中,开发者先编写测试用例,然后...

    java swing界面做的计算器

    用java swing界面做的计算器,能连续加减乘除,功能基本到位

    java Swing实现计算器源码

    java Swing实现计算器源码

    java中Swing做的简单计算器

    优化通常包括减少代码重复,使用更高效的数据结构或算法,或者利用Swing的高级特性,如布局管理器(Layout Manager)。例如,开发者可能使用GridLayout来更简洁地排列按钮,而不是手动设置每个组件的位置。此外,...

Global site tag (gtag.js) - Google Analytics