JAVA Swing学习之窗体文本显示

JAVA中提供了一种类Font,专门用来定义字体,关于这个字体的定位需要注意几点:

1.利用Font类的getStringBounds方法来获得包围字符串的矩形;

2.如果要的得到屏幕设备对于字体属性的描述,需要调用Graphics的getFontRenderContext方法;

3.注意几个概念:上坡度,下坡度,行间距,基线,行高,这些大小会用来定义对一个字符串的描述,其中如果得到包围字符串矩阵的边界,对其进行getWidth(),则可得到上坡度+下坡度+行间距;

4.如果想得到下坡度和行间距,需要调用font的getLineMetrics方法,然后利用LineMetrics方法的getDescent获得下坡度,getLeading获得行间距。

5.关于setDefaultCloseOperation方法的说明,只有一个参数,是一个整形参数,0,1,2,3分别代表:

0=DO_NOTHING_ON_CLOSE
1=HIDE_ON_CLOSE(default value)
2=DISPOSE_ON_CLOSE
3=EXIT_ON_CLOSE

下面是今天写的代码:

package font;
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import javax.swing.*;

public class FontTest
{
	public static void main(String[] args)
	{
		EventQueue.invokeLater(new Runnable()
				{
					public void run()
					{
						JFrame frame=new FontFrame();
						frame.setTitle("FontTest");
						frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
						frame.setVisible(true);
					}
				});

	}
}

class FontFrame extends JFrame
{
	public FontFrame()
	{
		add(new FontComponent());
		pack();
	}
}

class FontComponent extends JComponent
{
	private static final int DEFAULT_WIDTH=300;
	private static final int DEFAULT_HEIGHT=200;

	public void paintComponent(Graphics g)
	{
		Graphics2D g2=(Graphics2D)g;
		String message="Hello World!";
		Font f=new Font("Serif",Font.BOLD,36);
		g2.setFont(f);

		FontRenderContext context=g2.getFontRenderContext();
		Rectangle2D bounds=f.getStringBounds(message,context);

		double x=(getWidth()-bounds.getWidth())/2;
		double y=(getHeight()-bounds.getHeight())/2;

		double ascent=-bounds.getY();
		double baseY=y+ascent;

		g2.drawString(message,(int)x,(int)baseY);
		g2.setPaint(Color.LIGHT_GRAY);

		g2.draw(new Line2D.Double(x,baseY,x+bounds.getWidth(),baseY));
		Rectangle2D rect=new Rectangle2D.Double(x,y,bounds.getWidth(),bounds.getHeight());
		g2.draw(rect);

	}
	public Dimension getPreferredSize()
	{
		return new Dimension(DEFAULT_WIDTH,DEFAULT_HEIGHT);
	}
}

  

时间: 2024-11-04 19:14:58

JAVA Swing学习之窗体文本显示的相关文章

Java Swing 之设置窗体背景图片

/** * 设置窗体背景图片 * @author gao */ package com.gao; import java.awt.Graphics; import java.awt.Image; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; public class BackgroundDemo extends JFrame{ private Image image; pri

Java Swing设置主窗体位置居中方法

01.第一种方法 int windowWidth = frame.getWidth(); //获得窗体宽 int windowHeight = frame.getHeight(); //获得窗体高 Toolkit kit = Toolkit.getDefaultToolkit(); //定义工具包 Dimension screenSize = kit.getScreenSize(); //获取屏幕的尺寸 int screenWidth = screenSize.width; //获取屏幕的宽 i

Java Swing学习小结

1.使窗体位于屏幕中心 Dimension welcomeScreen=Toolkit.getDefaultToolkit().getScreenSize(); int x=(welcomeScreen.width-this.getSize().width)/2; int y=(welcomeScreen.height-this.getSize().height)/2; this.setBounds(x, y, 500, 400); 2.设置文件过滤器 private void jButton1

swing Jlable中存放变量显示问题

java swing 学习 在做一个ATM机系统小案例中,碰到JLable中存放变量,变量发生改变,而JLable中还是显示原来的值,网上寻找答案,用updateUI()和revalidate();方法都没有用,原来解决这个问题,需要把存放变量的JLable设为全局变量. atm机代码下载地址 版权声明:本文为博主原创文章,未经博主允许不得转载.

在运行myeclipse10注册机时,显示找不到com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel这个包

在win7下安装MyEclipse10.安装完成之后运行注册机,总是提示classnotfond显示找不到com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel这个包. 查看了一下没有配置环境变量,并且JDK版本不太对,就换了个1.6.1的jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008安装版的,然后重新配置环境变量,运行注册机OK一切搞定.

Java Swing界面编程(21)---事件处理:窗体事件

Splay树的插入操作,只需要处理好插入节点的孩子节点就可以了,最重要的是不要破坏了BST的基本规则. 因为高度并不是Splay树的首要因素,所以插入的时候也是使用splay操作,然后在根节点插入. 参考:http://www.geeksforgeeks.org/splay-tree-set-2-insert-delete/ 对比一下使用插入创建的树和手工创建数的区别,先序遍历的结果: #pragma once #include<stdio.h> #include <stdlib.h&g

atitit.窗体静听esc退出本窗体java swing c# .net php

atitit.窗体静听esc退出本窗体java swing c# .net php 1. 监听esc  按键 1 1.1. 监听一个组件 1 1.2. 监听加在form上 1 2. 关闭窗体 2 1. 监听esc  按键 1.1. 监听一个组件 1.2. 监听加在form上 作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:[email protected] 转载请注明来源: http://blog.csdn.net/attilax final Toolkit toolkit = To

JAVA 图形界面swing 创建按钮、文本域

package org.rui.swin; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; import org.rui.utils.SwingConsole; public class Button1 extends JFrame{ private JButton button1=new JButton("button1"), button2=new JButton(

Java Swing界面编程(17)---单行文本输入组件:JTextField

package com.beyole.util; import java.awt.GridLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; public class test15 { public static void main(String[] args) { JFrame frame = new JFrame("Crystal");// 实例化窗