您的位置:首页 > 其它

第二次作业

2016-03-17 19:14 316 查看
我这周做的这个字体选择框主要使用的组件分别是标签(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();

}

}

程序运行效果图:







我的照片:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: