Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListCellRenderer;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class Main {
    public static void main(String[] args) {
        JFrame frame = new ListRenderingFrame();
        frame.show();
    }

}

class FontCellRenderer implements ListCellRenderer {

    public Component getListCellRendererComponent(final JList list, final Object value, final int index,
            final boolean isSelected, final boolean cellHasFocus) {
        return new JPanel() {
            public void paintComponent(Graphics g) {
                super.paintComponent(g);
                Font font = (Font) value;
                String text = font.getFamily();
                FontMetrics fm = g.getFontMetrics(font);
                g.setColor(isSelected ? list.getSelectionBackground() : list.getBackground());
                g.fillRect(0, 0, getWidth(), getHeight());
                g.setColor(isSelected ? list.getSelectionForeground() : list.getForeground());
                g.setFont(font);
                g.drawString(text, 0, fm.getAscent());
            }

            public Dimension getPreferredSize() {
                Font font = (Font) value;
                String text = font.getFamily();
                Graphics g = getGraphics();
                FontMetrics fm = g.getFontMetrics(font);
                return new Dimension(fm.stringWidth(text), fm.getHeight());
            }
        };
    }

}

class ListRenderingFrame extends JFrame implements ListSelectionListener {
    JLabel label = new JLabel("The quick brown fox jumps over the lazy dog");

    public ListRenderingFrame() {
        setTitle("ListRendering");
        setSize(400, 300);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        Vector fonts = new Vector();
        fonts.add(new Font("Serif", Font.PLAIN, 8));
        fonts.add(new Font("SansSerif", Font.BOLD, 12));
        fonts.add(new Font("Monospaced", Font.PLAIN, 16));
        fonts.add(new Font("Dialog", Font.ITALIC, 12));
        fonts.add(new Font("DialogInput", Font.PLAIN, 12));
        JList fontList = new JList(fonts);
        fontList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        fontList.setCellRenderer(new FontCellRenderer());
        JScrollPane scrollPane = new JScrollPane(fontList);

        JPanel p = new JPanel();
        p.add(scrollPane);
        fontList.addListSelectionListener(this);

        getContentPane().add(p, "Center");

        getContentPane().add(label, "South");
    }

    public void valueChanged(ListSelectionEvent evt) {
        JList source = (JList) evt.getSource();
        Font font = (Font) source.getSelectedValue();
        label.setFont(font);
    }
}