【问题标题】:Preview window (like Windows 7 taskbar shows for opened applications)预览窗口(如打开的应用程序的 Windows 7 任务栏显示)
【发布时间】:2012-04-22 20:29:40
【问题描述】:

我想为我的“主窗口”创建一个“预览窗口”,所以如果我将鼠标指针指向一个特定的按钮或位置,那么它会在一个小窗口中显示主窗口预览,当我点击那个“预览”时窗口”然后它应该返回到“主窗口”。例如,Windows 7 任务栏为每个打开的应用程序创建预览。我怎样才能向我的用户提供此功能?

例如

【问题讨论】:

  • 你有没有尝试过任何东西?例如,在图像中绘制您的主 UI,调整该图像的大小并将其用作预览?
  • 不,先生,我对此一无所知。而且我是 java 的初学者,所以我不知道如何在图像中绘制主 UI。请你解释一下??
  • “在图像中绘制您的主 UI..” 请参阅 ComponentImageCapture.java 以获取示例。
  • @Andrew Thompson 非常感谢您的帮助。我会试试看,如果我遇到任何问题,我会回复你。

标签: java image swing preview


【解决方案1】:

一个极其简单的实现。

import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.*;

class ShowPreviews {

    class ToolTipListener extends MouseAdapter {

        JWindow toolTip;
        JLabel label;
        Component preview;

        ToolTipListener(Component preview) {
            this.preview = preview;
        }

        @Override
        public void mouseEntered(MouseEvent me) {
            if (toolTip==null) {
                toolTip = new JWindow();
                label = new JLabel();
                toolTip.add(label);
            }
            label.setIcon( new ImageIcon(
                getScaledImageOfComponent(preview, .6) ) );
            toolTip.pack();
            Component c = (Component)me.getSource();
            int x = c.getLocationOnScreen().x+(c.getWidth()/2);
            int y = c.getLocationOnScreen().y+c.getHeight();

            toolTip.setLocation(x,y);
            toolTip.setVisible(true);
        }

        @Override
        public void mouseExited(MouseEvent me) {
            toolTip.setVisible(false);
            toolTip.dispose();
        }

        public Image getScaledImageOfComponent(
            Component component, double scale) {
            BufferedImage bi = new BufferedImage(
                (int)(component.getWidth()*scale),
                (int)(component.getHeight()*scale),
                BufferedImage.TYPE_INT_RGB);

            Graphics2D g = bi.createGraphics();
            g.scale(scale, scale);
            component.paint(g);
            g.dispose();

            return bi;
        }
    }

    ShowPreviews() {
        JPanel gui = new JPanel(new BorderLayout(2,2));

        final CardLayout cards = new CardLayout();
        final JPanel cardPanel = new JPanel(cards);

        JPanel treePanel = new JPanel();
        JTree tree = new JTree();
        tree.setVisibleRowCount(5);
        tree.expandRow(2);
        treePanel.add(new JScrollPane(tree));
        cardPanel.add(treePanel, "tree");

        JPanel labelPanel = new JPanel(new GridLayout(0,1,2,2));
        for (int ii=1; ii<7; ii++) {
            labelPanel.add(new JLabel("Label " + ii));
        }
        cardPanel.add(new JScrollPane(labelPanel), "label");

        JToolBar uiSelectors = new JToolBar();
        // we should use a ButtonGroup for the cards,
        // but plain buttons look better on hover.
        JButton treeButton = new JButton("Tree");
        treeButton.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent ae) {
                cards.show(cardPanel, "tree");
            }
        });
        uiSelectors.add(treeButton);

        treeButton.addMouseListener( new ToolTipListener(treePanel));

        JButton labelButton = new JButton("Label");
        labelButton.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent ae) {
                cards.show(cardPanel, "label");
            }
        });
        uiSelectors.add(labelButton);

        labelButton.addMouseListener( new ToolTipListener(labelPanel));

        gui.add(uiSelectors, BorderLayout.NORTH);
        gui.add(cardPanel, BorderLayout.CENTER);

        JOptionPane.showMessageDialog(null, gui);
    }

    public static void main(String[] args) {
        // start the GUI on the EDT
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new ShowPreviews();
            }
        });
    }
}

【讨论】:

    猜你喜欢
    • 2012-07-05
    • 1970-01-01
    • 2011-08-03
    • 2011-11-12
    • 2023-04-02
    • 2011-10-31
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    相关资源
    最近更新 更多