Unable to use the quaqua look and feel

天涯浪子 提交于 2019-12-13 01:40:01

问题


I have downloaded the quaqua 8 package. I unzipped it and placed the quaqua.jar file in the working library of my project.

Then in the main method I applied for the Quaqua look and feel. But I get an error saying ch.randelshofer.quaqua package doesn't exist. Why is it so?

Do I need to do anything else?

Also listed in the compile library:

The IDE that I am using is NetBeans and the OS is Windows.


回答1:


Output from Netbeans / Win OS / same import to the Libraries; Quaqua left, Mac OS X right.

  

  1. List item

from code

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.event.*;

public class JListDisabledItemDemo implements ItemListener, Runnable {

    private JFrame f = new JFrame("Colors");
    private static final String ITEMS[] = {" black ", " blue ", " green ",
        " orange ", " purple ", " red ", " white ", " yellow "};
    private JList jList;
    private JCheckBox[] checkBoxes;
    private boolean[] enabledFlags;

    @Override
    public void run() {
        JPanel pnlEnablers = new JPanel(new GridLayout(0, 1));
        pnlEnablers.setBorder(BorderFactory.createTitledBorder("Enabled Items"));
        checkBoxes = new JCheckBox[ITEMS.length];
        enabledFlags = new boolean[ITEMS.length];
        for (int i = 0; i < ITEMS.length; i++) {
            checkBoxes[i] = new JCheckBox(ITEMS[i]);
            checkBoxes[i].setSelected(true);
            checkBoxes[i].addItemListener(this);
            enabledFlags[i] = true;
            pnlEnablers.add(checkBoxes[i]);
        }
        jList = new JList(ITEMS);
        jList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        jList.setSelectionModel(new DisabledItemSelectionModel());
        jList.setCellRenderer(new DisabledItemListCellRenderer());
        jList.addListSelectionListener(new ListSelectionListener() {

            @Override
            public void valueChanged(ListSelectionEvent e) {
                if (!e.getValueIsAdjusting()) {
                    System.out.println("selection");
                }
            }
        });
        JScrollPane scroll = new JScrollPane(jList);
        scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

        Container contentPane = f.getContentPane();
        contentPane.setLayout(new GridLayout(1, 2));
        contentPane.add(pnlEnablers);
        contentPane.add(scroll);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLocation(240, 280);
        UIManager.put("List.background", Color.lightGray);
        UIManager.put("List.selectionBackground", Color.orange);
        UIManager.put("List.selectionForeground", Color.blue);
        UIManager.put("Label.disabledForeground", Color.magenta);
        SwingUtilities.updateComponentTreeUI(f);
        f.pack();
        javax.swing.SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                f.setVisible(true);
            }
        });
    }

    @Override
    public void itemStateChanged(ItemEvent event) {
        JCheckBox checkBox = (JCheckBox) event.getSource();
        int index = -1;
        for (int i = 0; i < ITEMS.length; i++) {
            if (ITEMS[i].equals(checkBox.getText())) {
                index = i;
                break;
            }
        }
        if (index != -1) {
            enabledFlags[index] = checkBox.isSelected();
            jList.repaint();
        }
    }

    public static void main(String args[]) {
        System.setProperty("Quaqua.tabLayoutPolicy", "wrap");
        try {
            UIManager.setLookAndFeel(ch.randelshofer.quaqua.QuaquaManager.getLookAndFeel());
        } catch (Exception e) {
        }

        /*try {
            for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                System.out.println(info.getName());
                if ("Nimbus".equals(info.getName())) {
                    UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (UnsupportedLookAndFeelException e) {
            // handle exception
        } catch (ClassNotFoundException e) {
            // handle exception
        } catch (InstantiationException e) {
            // handle exception
        } catch (IllegalAccessException e) {
            // handle exception
        }*/
        SwingUtilities.invokeLater(new JListDisabledItemDemo());
    }

    private class DisabledItemListCellRenderer extends DefaultListCellRenderer {

        private static final long serialVersionUID = 1L;

        @Override
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
            Component comp = super.getListCellRendererComponent(list, value, index, false, false);
            JComponent jc = (JComponent) comp;
            if (enabledFlags[index]) {
                if (isSelected & cellHasFocus) {
                    comp.setForeground(Color.black);
                    comp.setBackground(Color.red);
                } else {
                    comp.setBackground(Color.white);
                    comp.setForeground(Color.black);
                }
                if (!isSelected) {
                    if ((value.toString()).trim().equals("yellow")) {
                        comp.setForeground(Color.blue);
                        comp.setBackground(Color.yellow);
                    } else if ((value.toString()).trim().equals("black")) {
                        comp.setForeground(Color.red);
                        comp.setBackground(Color.black);
                    }else if ((value.toString()).trim().equals("orange")) {
                        comp.setForeground(Color.blue);
                        comp.setBackground(Color.orange);
                    }
                }
                return comp;
            }
            comp.setEnabled(false);
            return comp;
        }
    }

    private class DisabledItemSelectionModel extends DefaultListSelectionModel {

        private static final long serialVersionUID = 1L;

        @Override
        public void setSelectionInterval(int index0, int index1) {
            if (enabledFlags[index0]) {
                super.setSelectionInterval(index0, index0);
            } else {
                /*The previously selected index is before this one,
                 * so walk forward to find the next selectable item.*/
                if (getAnchorSelectionIndex() < index0) {
                    for (int i = index0; i < enabledFlags.length; i++) {
                        if (enabledFlags[i]) {
                            super.setSelectionInterval(i, i);
                            return;
                        }
                    }
                } /*
                 * Otherwise, walk backward to find the next selectable item.
                 */ else {
                    for (int i = index0; i >= 0; i--) {
                        if (enabledFlags[i]) {
                            super.setSelectionInterval(i, i);
                            return;
                        }
                    }
                }
            }
        }
    }
}

Notice from Quaqua Look and Feel official page:

Supported Platforms

The Quaqua Look and Feel supports Apple's J2SE 1.4, J2SE 5 and J2SE 6 
and SoyLatte J2SE 6 on Mac OS X 10.4 and 10.5.

Altough Quaqua works with J2SE 6, it provides limited support for features 
which go beyond J2SE 5.

The Quaqua native libraries support PowerPC and Intel Macs with 32-bits
or 64-bit processors. Quaqua will work without these native libraries, 
but user experience degrades.

Due to copyright restrictions and technical constraints, Quaqua can be 
run on non-Mac OS X systems for development purposes only.
FAQ
Can I use Quaqua on other platforms than Mac OS X?

No, you can't, except for development purposes.
This is because the Aqua user interface can only be licensed from Apple 
for use on Mac OS X.

Even if Apple would license it for use on other platforms, you wouldn't 
want to do it if you care about your users.
Aqua does not just look different than other user interfaces, it feels 
different as well. For example, when compared with the Windows UX 
interface, differences can be found in the set of keyboard accelerators, 
the focus behavior, the selection behavior, the modality of dialogs and 
in the use of transition and animation effects.

due this license I am suggesting to use another (today's and more nicer) Custom Look and Feel




回答2:


From that red highlight under "ch" the IDE adds to your code I'm guessing you haven't added that jar file properly to the classpath. Take a loog at your IDE's documentation (is it Netbeans you're using) and see how they tell you to add an external jar to a project.



来源:https://stackoverflow.com/questions/9260395/unable-to-use-the-quaqua-look-and-feel

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!