adesh singh
adesh singh

Reputation: 1727

How to apply JTatto themes on JFrame using Swing

I am trying to apply a JTatto look and feel in my swing project.

The theme is being applied on some forms but on others the controls aren't working properly. They are overlapping on top of each other.

To apply the theme I am using the following code

try
{
  String lookandfeel="com.jtattoo.plaf.smart.SmartLookAndFeel";
  UIManager.setLookAndFeel(lookandfeel);
 }
 catch(Exception ex)
{
 ex.printStackTrace();
}

Upvotes: 1

Views: 1969

Answers (1)

mKorbel
mKorbel

Reputation: 109813

  • works as I expecting

  • L&F must be

    1. initialized before GUI creations

    2. for changes on runtime, applied to all Top-Level Containers by calling SwingUtilities.updateComponentTreeUI(Component c), where simpler will be Component c == local variable for Top-Level Container, otherwise you have to iterating and to apply this look to each of JComponents separatelly, to all in the current components tree

enter image description here

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.border.BevelBorder;

public class MenuExample extends JPanel {

    private static final long serialVersionUID = 1L;
    private Icon errorIcon = UIManager.getIcon("OptionPane.errorIcon");
    private Icon infoIcon = UIManager.getIcon("OptionPane.informationIcon");
    private Icon warnIcon = UIManager.getIcon("OptionPane.warningIcon");
    private Icon questIcon = UIManager.getIcon("OptionPane.questionIcon");
    private JTextPane pane;
    private JMenuBar menuBar;

    public MenuExample() {
        menuBar = new JMenuBar();
        JMenu formatMenu = new JMenu("Justify");
        formatMenu.setMnemonic('J');
        MenuAction leftJustifyAction = new MenuAction("Left", errorIcon);
        MenuAction rightJustifyAction = new MenuAction("Right", infoIcon);
        MenuAction centerJustifyAction = new MenuAction("Center", warnIcon);
        MenuAction fullJustifyAction = new MenuAction("Full", questIcon);
        JMenuItem item;
        item = formatMenu.add(leftJustifyAction);
        item.setMnemonic('L');
        item = formatMenu.add(rightJustifyAction);
        item.setMnemonic('R');
        item = formatMenu.add(centerJustifyAction);
        item.setMnemonic('C');
        item = formatMenu.add(fullJustifyAction);
        item.setMnemonic('F');
        menuBar.add(formatMenu);
        menuBar.setBorder(new BevelBorder(BevelBorder.RAISED));
        pane = new JTextPane();
        pane.setPreferredSize(new Dimension(250, 250));
        pane.setBorder(new BevelBorder(BevelBorder.LOWERED));
        JFrame frame = new JFrame("Menu Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setJMenuBar(menuBar);
        frame.add(pane, BorderLayout.CENTER);
        frame.pack();
        frame.setLocation(150, 150);
        frame.setVisible(true);
    }

    class MenuAction extends AbstractAction {

        public MenuAction(String text, Icon icon) {
            super(text, icon);
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            try {
                pane.getStyledDocument().insertString(0,
                        "Action [" + e.getActionCommand()
                        + "] performed!\n", null);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }

    public static void main(String s[]) {
        try {
            UIManager.setLookAndFeel("com.jtattoo.plaf.smart.SmartLookAndFeel");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                MenuExample example = new MenuExample();
            }
        });
    }
}

Upvotes: 2

Related Questions