org.forester.archaeopteryx.FontChooser Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of forester Show documentation
Show all versions of forester Show documentation
Applications and software libraries for evolutionary biology and comparative genomics research
The newest version!
// $Id:
// FORESTER -- software libraries and applications
// for evolutionary biology research and applications.
//
// The FontChooser class is in the Public Domain, the code may be used
// for any purpose. It is provided as is with no warranty.
//
// The FontChooser class is based on the JFontChooser class written
// by: James Bardsley ([email protected])
//
// Contact: phylosoft @ gmail . com
// WWW: https://sites.google.com/site/cmzmasek/home/software/forester
package org.forester.archaeopteryx;
import java.awt.Component;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
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.ScrollPaneConstants;
import javax.swing.border.TitledBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class FontChooser extends JDialog implements ActionListener, ListSelectionListener {
private static final String BOLD_ITALIC = "Bold Italic";
private static final String ITALIC = "Italic";
private static final String BOLD = "Bold";
private static final String REGULAR = "Regular";
private static final String DEFAULT_FONT_NAME = "Sans";
public static final long serialVersionUID = 62256323L;
private static final String[] STYLE = { REGULAR, BOLD, ITALIC, BOLD_ITALIC };
private static final String[] SIZE = { "3", "4", "6", "8", "10", "12", "14", "16", "18", "20", "22",
"24", "26", "28", "36", "72" };
private static final int OK_OPTION = 1;
private static final int CANCEL_OPTION = 2;
private Font _font;
private int _option;
private String _type;
private int _style;
private int _size;
private final JList _font_list = new JList( AptxUtil.getAvailableFontFamiliesSorted() );
private final JList _style_list = new JList( STYLE );
private final JList _size_list = new JList( SIZE );
private final JTextField _fonts_tf = new JTextField();
private final JTextField _style_tf = new JTextField();
private final JTextField _size_tf = new JTextField();
private final JLabel _fonts_label = new JLabel( "Font:" );
private final JLabel _style_label = new JLabel( "Style:" );
private final JLabel _size_label = new JLabel( "Size:" );
private final JScrollPane _font_jsp = new JScrollPane( _font_list );
private final JScrollPane _style_jsp = new JScrollPane( _style_list );
private final JScrollPane _size_jsp = new JScrollPane( _size_list );
private final JButton _ok_button = new JButton( "OK" );
private final JButton _cancel_button = new JButton( "Cancel" );
private final JTextField _test_tf = new JTextField( "AaBbZz012" );
public FontChooser() {
this( new Font( DEFAULT_FONT_NAME, Font.PLAIN, 12 ) );
}
public FontChooser( final Font font ) {
final Container container = getContentPane();
final JPanel panel = new JPanel();
final TitledBorder panel_border = new TitledBorder( "Demo" );
_font = font;
_type = _font.getFontName();
_style = _font.getStyle();
_size = _font.getSize();
_font_list.setSelectionMode( 0 );
_style_list.setSelectionMode( 0 );
_size_list.setSelectionMode( 0 );
_font_jsp.setHorizontalScrollBarPolicy( ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER );
_style_jsp.setHorizontalScrollBarPolicy( ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER );
_size_jsp.setHorizontalScrollBarPolicy( ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER );
panel.setBorder( panel_border );
_fonts_tf.setBounds( 8, 32, 121, 20 );
_font_jsp.setBounds( 8, 56, 121, 82 );
_style_tf.setBounds( 136, 32, 121, 20 );
_style_jsp.setBounds( 136, 56, 121, 82 );
_size_tf.setBounds( 264, 32, 41, 20 );
_size_jsp.setBounds( 264, 56, 41, 82 );
_ok_button.setBounds( 320, 8, 89, 17 );
_cancel_button.setBounds( 320, 32, 89, 17 );
panel.setBounds( 320, 64, 89, 73 );
container.add( _fonts_label );
container.add( _fonts_tf );
container.add( _font_jsp );
container.add( _style_label );
container.add( _style_tf );
container.add( _style_jsp );
container.add( _size_label );
container.add( _size_tf );
container.add( _size_jsp );
container.add( _ok_button );
container.add( _cancel_button );
container.add( panel );
_test_tf.setBounds( 8, 25, 73, 30 );
panel.add( _test_tf );
container.setLayout( null );
panel.setLayout( null );
setSize( 424, 177 );
setResizable( false );
setModal( true );
_fonts_tf.addActionListener( this );
_size_tf.addActionListener( this );
_style_tf.addActionListener( this );
_cancel_button.addActionListener( this );
_ok_button.addActionListener( this );
_font_list.addListSelectionListener( this );
_style_list.addListSelectionListener( this );
_size_list.addListSelectionListener( this );
}
public FontChooser( final String font_name, final int font_style, final int size ) {
this( new Font( font_name, font_style, size ) );
}
@Override
public void actionPerformed( final ActionEvent e ) {
if ( e.getSource() == _fonts_tf ) {
boolean found = false;
_type = _fonts_tf.getText();
for( int i = 0; i < _font_list.getModel().getSize(); i++ ) {
if ( _font_list.getModel().getElementAt( i ).startsWith( _fonts_tf.getText().trim() ) ) {
_font_list.setSelectedIndex( i );
setScrollPos( _font_jsp, _font_list, i );
found = true;
break;
}
}
if ( !found ) {
_font_list.clearSelection();
}
else {
_test_tf.setFont( new Font( _type, _style, _size ) );
}
}
else if ( e.getSource() == _size_tf ) {
boolean found = false;
parseSize();
_test_tf.setFont( new Font( _type, _style, _size ) );
for( int i = 0; i < _size_list.getModel().getSize(); i++ ) {
if ( _size_tf.getText().trim().equals( _size_list.getModel().getElementAt( i ) ) ) {
_size_list.setSelectedIndex( i );
setScrollPos( _size_jsp, _size_list, i );
found = true;
break;
}
}
if ( !found ) {
_size_list.clearSelection();
}
}
else if ( e.getSource() == _style_tf ) {
if ( _style_tf.getText().equals( REGULAR ) ) {
_style = Font.PLAIN;
}
else if ( _style_tf.getText().equals( BOLD ) ) {
_style = Font.BOLD;
}
else if ( _style_tf.getText().equals( ITALIC ) ) {
_style = Font.ITALIC;
}
else if ( _style_tf.getText().equals( BOLD_ITALIC ) ) {
_style = Font.BOLD & Font.ITALIC;
}
_style_list.setSelectedIndex( _style );
_test_tf.setFont( new Font( _type, _style, _size ) );
}
else if ( e.getSource() == _ok_button ) {
parseSize();
_option = OK_OPTION;
_font = new Font( _type, _style, _size );
setVisible( false );
}
else if ( e.getSource() == _cancel_button ) {
_option = CANCEL_OPTION;
setVisible( false );
}
}
@Override
public Font getFont() {
return _font;
}
public String getFontName() {
return _font.getFontName();
}
public int getFontSize() {
return _font.getSize();
}
public int getFontStyle() {
return _font.getStyle();
}
@Override
public void setFont( final Font font ) {
_font = font;
}
public int showDialog( final Component parent, final String title ) {
boolean found = false;
_option = CANCEL_OPTION;
setTitle( title );
_test_tf.setFont( new Font( _type, _style, _size ) );
for( int i = 0; i < _font_list.getModel().getSize(); i++ ) {
_font_list.setSelectedIndex( i );
if ( _font.getFamily().equals( _font_list.getSelectedValue() ) ) {
found = true;
setScrollPos( _font_jsp, _font_list, i );
break;
}
}
if ( !found ) {
_font_list.clearSelection();
}
_style_list.setSelectedIndex( _font.getStyle() );
found = false;
for( int i = 0; i < _size_list.getModel().getSize(); i++ ) {
_size_list.setSelectedIndex( i );
if ( _font.getSize() <= Integer.parseInt( _size_list.getSelectedValue() ) ) {
found = true;
setScrollPos( _size_jsp, _size_list, i );
break;
}
}
if ( !found ) {
_size_list.clearSelection();
}
setLocationRelativeTo( parent );
setVisible( true );
return _option;
}
@Override
public void valueChanged( final ListSelectionEvent e ) {
if ( e.getSource() == _font_list ) {
if ( _font_list.getSelectedValue() != null ) {
_fonts_tf.setText( ( ( _font_list.getSelectedValue() ) ) );
}
_type = _fonts_tf.getText();
_test_tf.setFont( new Font( _type, _style, _size ) );
}
else if ( e.getSource() == _style_list ) {
_style_tf.setText( ( ( _style_list.getSelectedValue() ) ) );
if ( _style_tf.getText().equals( REGULAR ) ) {
_style = 0;
}
else if ( _style_tf.getText().equals( BOLD ) ) {
_style = 1;
}
else if ( _style_tf.getText().equals( ITALIC ) ) {
_style = 2;
}
else if ( _style_tf.getText().equals( BOLD_ITALIC ) ) {
_style = 3;
}
_test_tf.setFont( new Font( _type, _style, _size ) );
}
else if ( e.getSource() == _size_list ) {
if ( _size_list.getSelectedValue() != null ) {
_size_tf.setText( ( ( _size_list.getSelectedValue() ) ) );
}
_size = ( Integer.parseInt( _size_tf.getText().trim() ) );
_test_tf.setFont( new Font( _type, _style, _size ) );
}
}
private void parseSize() {
try {
_size = ( Integer.parseInt( _size_tf.getText().trim() ) );
}
catch ( final Exception ex ) {
// Ignore.
}
if ( _size < 1 ) {
_size = 1;
}
}
private void setScrollPos( final JScrollPane sp, final JList list, final int index ) {
final int unit_size = sp.getVerticalScrollBar().getMaximum() / list.getModel().getSize();
sp.getVerticalScrollBar().setValue( ( index - 2 ) * unit_size );
}
}