第二次作业

我这周做的这个字体选择框主要使用的组件分别是标签(JLabel)、文本框(JTextField)、列表框(JList),中间容器主要使用了面板(JPanel)和滚动面板(JScrollPane)
标签(JLabel):private JLabel nameLbl,styleLbl,sizeLbl;
styleLbl = new JLabel("字形");
文本框(JTextField):private JTextField nameText,styleText,sizeText;
styleText = new JTextField("正常");
列表框(JList):private JList nameList,styleList,sizeList;
styleList =new JList(style);
滚动面板(JScrollPane): private JScrollPane nameSPane,styleSPane,sizeSPane;
styleSPane = new JScrollPane(styleList);
通过查阅API文档和相关资料学习了获取系统所安装的字体名称,以便显示在第一个类表框中,代码如下
GraphicsEnvironment eq = GraphicsEnvironment.getLocalGraphicsEnvironment();
String[] availableFonts = eq.getAvailableFontFamilyNames();
代码如下:
import java.awt.*;

import java.awt.event.*;

import javax.swing.;
import javax.swing.event.
;

public class fontDialog extends JDialog implements ActionListener,ListSelectionListener{
public static final int Cancle = 0;
public static final int OK = 1;
public static final String [] style = {"正常","斜体","粗体","粗斜体"};
public static final String [] size = {"8","9","12","14","22","24","72"};
private Font userFont = null;
private int userSelect = Cancle;
private JFrame parent = null;
private Container con;
private JScrollPane nameSPane,styleSPane,sizeSPane;
private JPanel panel[];
private JLabel nameLbl,styleLbl,sizeLbl;
private JTextField nameText,styleText,sizeText;
private JList nameList,styleList,sizeList;
private JButton OKbtn,cancleBtn;
private fontDialog myFontDialog=null;
private JTextArea text;

public fontDialog(){
	this(null);
}

public fontDialog(JFrame owner) {
	// TODO Auto-generated constructor stub
	super(owner,true);
	parent = owner;
	setTitle("字体");
	con = getContentPane();
	//设置中间容器的布局,从上到下排列
	BoxLayout box  = new BoxLayout(con,BoxLayout.Y_AXIS);
	con.setLayout(box);
	
	panel = new JPanel[4];
	for(int i = 0;i<3;i++){
		panel[i] = new JPanel();
		panel[i].setLayout(new GridLayout(1,3));
		panel[i].setBackground(Color.GREEN);
	}
	panel[3] = new JPanel();
	panel[3].setLayout(new FlowLayout());
	//创建第一行的3个标签放在第一个panel中
	nameLbl = new JLabel("字体");
	styleLbl = new JLabel("字形");
	sizeLbl = new JLabel("大小");
	panel[0].add(nameLbl);
	panel[0].add(styleLbl);
	panel[0].add(sizeLbl);
	//创建第二行的3个文本框放在第二个panel中
	nameText = new JTextField("宋体");
	nameText.setColumns(5);
	//设置只读
	nameText.setEditable(false);
	nameText.setBackground(Color.YELLOW);
	styleText = new JTextField("正常");
	styleText.setColumns(5);
	styleText.setEditable(false);
	styleText.setBackground(Color.YELLOW);
	text = new JTextArea();
	sizeText = new JTextField("12");
	sizeText.setColumns(5);
	sizeText.setEditable(false);
	sizeText.setBackground(Color.YELLOW);
	panel[1].add(nameText);
	panel[1].add(styleText);
	panel[1].add(sizeText);
	
	//获取系统所安装的字体名称,以便显示在第一个类表框中
	GraphicsEnvironment eq = GraphicsEnvironment.getLocalGraphicsEnvironment();
	String[] availableFonts = eq.getAvailableFontFamilyNames();
	nameList =new JList(availableFonts);
	nameList.addListSelectionListener(this);//事件监听器
	nameSPane = new JScrollPane(nameList);
	nameList.setBackground(Color.magenta);
	styleList =new JList(style);
	styleList.addListSelectionListener(this);//事件监听器
	styleSPane = new JScrollPane(styleList);
	styleList.setBackground(Color.magenta);
	
	sizeList =new JList(size);
	sizeList.addListSelectionListener(this);//事件监听器
	sizeSPane = new JScrollPane(sizeList);
	sizeList.setBackground(Color.magenta);
	
	panel[2].add(nameSPane);
	panel[2].add(styleSPane);
	panel[2].add(sizeSPane);
	
	OKbtn = new JButton("确定");
	OKbtn.addActionListener(this);
	cancleBtn = new JButton("取消");
	cancleBtn.addActionListener(this);
	panel[3].add(OKbtn);
	panel[3].add(cancleBtn);
	for(int i=0;i<4;i++){
		con.add(panel[i]);
	}
	showFontDialog();
	//parent.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

@Override
public void actionPerformed(ActionEvent e) {
	// TODO Auto-generated method stub
	String mse = "";
	int styleIndex = Font.PLAIN,fontSize;
	if(e.getSource() == OKbtn){
		if(styleText.getText().equals("正常"))
			styleIndex = Font.PLAIN;
		
		if(styleText.getText().equals("斜体"))
			styleIndex = Font.ITALIC;
		if(styleText.getText().equals("粗斜体"))
			styleIndex = Font.BOLD;
		
		fontSize = Integer.parseInt(sizeText.getText());
		userFont = new Font(nameText.getText(),styleIndex,fontSize);
		userSelect = OK;
		mse = mse+" "+nameText.getText()+"  "+sizeText.getText()+"  "+styleText.getText();
		setVisible(false);
		JOptionPane.showMessageDialog(parent, "你选择了"+mse);

	}
	else{
		userSelect = Cancle;
		setVisible(false);
	}
}

@Override
public void valueChanged(ListSelectionEvent e) {
	// TODO Auto-generated method stub
	if(e.getSource() ==nameList)
		nameText.setText((String)nameList.getSelectedValue());
	if(e.getSource() ==styleList)
		styleText.setText((String)styleList.getSelectedValue());
	if(e.getSource() ==sizeList)
		sizeText.setText((String)sizeList.getSelectedValue());
	
}
public int showFontDialog(){
	setSize(300,300);
	int x,y;
	if(parent !=null){
		x=parent.getX()+30;
		y=parent.getY()+30;
	}else{
		x = 150;
		y = 100;
	}
	setLocation(new Point(x,y));
	setVisible(true);
	return userSelect;
}
public Font getFont(){
	return userFont;
}
 void doChangeFont(){
	if(myFontDialog ==null)
		myFontDialog = new fontDialog();
	if(((fontDialog) myFontDialog).showFontDialog() == fontDialog.OK)
		text.setFont(myFontDialog.getFont());
	
}


public static void main(String[] args) {
	new fontDialog();
	
}

}
程序运行效果图:

我的照片:

posted @ 2016-03-17 19:14  软二2014330208胡美玲  阅读(188)  评论(1编辑  收藏  举报