/* This code was found posted on a forum without any copyright
* restrictions. It was written by someone named Noah W.
* That's all I know */
/* I have modified the original code but claim no copyright on it of any kind */
/*
This file is part of BORG.
BORG is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
BORG is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with BORG; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Copyright 2003 by Mike Berger
*/
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GraphicsEnvironment;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Enumeration;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.plaf.FontUIResource;
//
// FontChooser by Noah w.
//
public class NwFontChooserS extends JDialog {
String[] styleList = new String[] { "Plain", "Bold", "Italic" };
String[] sizeList =
new String[] {
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19",
"20",
"22",
"24",
"27",
"30",
"34",
"39",
"45",
"51",
"60" };
NwList StyleList;
NwList FontList;
NwList SizeList;
static JLabel Sample = new JLabel();
boolean ob = false;
private NwFontChooserS(Frame parent, boolean modal, Font font) {
super(parent, modal);
initAll();
setTitle("Font Choosr");
if (font == null)
font = Sample.getFont();
FontList.setSelectedItem(font.getName());
SizeList.setSelectedItem(font.getSize() + "");
StyleList.setSelectedItem(styleList[font.getStyle()]);
}
public static Font showDialog(Frame parent, String s, Font font) {
NwFontChooserS fd = new NwFontChooserS(parent, true, font);
if (s != null)
fd.setTitle(s);
fd.setVisible(true);
Font fo = null;
if (fd.ob)
fo = Sample.getFont();
fd.dispose();
return (fo);
}
private void initAll() {
getContentPane().setLayout(null);
setBounds(50, 50, 450, 450);
addLists();
addButtons();
Sample.setBounds(10, 320, 415, 25);
Sample.setForeground(Color.black);
getContentPane().add(Sample);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
setVisible(false);
}
});
}
private void addLists() {
FontList =
new NwList(
GraphicsEnvironment
.getLocalGraphicsEnvironment()
.getAvailableFontFamilyNames());
StyleList = new NwList(styleList);
SizeList = new NwList(sizeList);
FontList.setBounds(10, 10, 260, 295);
StyleList.setBounds(280, 10, 80, 295);
SizeList.setBounds(370, 10, 40, 295);
getContentPane().add(FontList);
getContentPane().add(StyleList);
getContentPane().add(SizeList);
}
private void addButtons() {
JButton ok = new JButton("OK");
ok.setMargin(new Insets(0, 0, 0, 0));
JButton ca = new JButton("Cancel");
ca.setMargin(new Insets(0, 0, 0, 0));
ok.setBounds(260, 350, 70, 20);
ok.setFont(new Font(" ", 1, 11));
ca.setBounds(340, 350, 70, 20);
ca.setFont(new Font(" ", 1, 12));
getContentPane().add(ok);
getContentPane().add(ca);
ok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setVisible(false);
ob = true;
}
});
ca.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setVisible(false);
ob = false;
}
});
}
private void showSample() {
int g = 0;
try {
g = Integer.parseInt(SizeList.getSelectedValue());
}
catch (NumberFormatException nfe) {
}
String st = StyleList.getSelectedValue();
int s = Font.PLAIN;
if (st.equalsIgnoreCase("Bold"))
s = Font.BOLD;
if (st.equalsIgnoreCase("Italic"))
s = Font.ITALIC;
Sample.setFont(new Font(FontList.getSelectedValue(), s, g));
Sample.setText("The quick brown fox jumped over the lazy dog.");
}
//////////////////////////////////////////////////////////////////////
private class NwList extends JPanel {
JList jl;
JScrollPane sp;
JLabel jt;
String si = " ";
public NwList(String[] values) {
setLayout(null);
jl = new JList(values);
sp = new JScrollPane(jl);
jt = new JLabel();
jt.setBackground(Color.white);
jt.setForeground(Color.black);
jt.setOpaque(true);
jt.setBorder(new JTextField().getBorder());
jt.setFont(getFont());
jl.setBounds(0, 0, 100, 1000);
jl.setBackground(Color.white);
jl.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
jt.setText((String) jl.getSelectedValue());
si = (String) jl.getSelectedValue();
showSample();
}
});
add(sp);
add(jt);
}
public String getSelectedValue() {
return (si);
}
public void setSelectedItem(String s) {
jl.setSelectedValue(s, true);
}
public void setBounds(int x, int y, int w, int h) {
super.setBounds(x, y, w, h);
sp.setBounds(0, y + 12, w, h - 23);
sp.revalidate();
jt.setBounds(0, 0, w, 20);
}
}
static public String fontString(Font font) {
String fs = font.getFamily();
if( !font.isPlain() ) {
fs += "-";
if( font.isBold()) {
fs += "BOLD";
}
if( font.isItalic()) {
fs += "ITALIC";
}
}
fs += "-" + font.getSize();
return(fs);
}
static public void setDefaultFont(Font f ) {
FontUIResource fui = new FontUIResource(f);
Enumeration<Object> keys = UIManager.getDefaults().keys();
while (keys.hasMoreElements()) {
Object key = keys.nextElement();
Object value = UIManager.get(key);
if (value instanceof FontUIResource)
UIManager.put(key, fui);
}
}
public static void main(String args[]) {
Font font = null;
font = NwFontChooserS.showDialog(null, null, null);
System.out.println(fontString(font));
}
}