From 6882601c6a907c5f39a3c1bd88e816fd6992a142 Mon Sep 17 00:00:00 2001 From: weisj Date: Sat, 8 Feb 2020 23:06:14 +0100 Subject: [PATCH] Reworked ToolTip demo. Added ToolTip demo gif. Signed-off-by: weisj --- img/toolTip.gif | Bin 0 -> 57500 bytes .../components/tooltip/ToolTipAware.java | 29 +++++++ .../components/tooltip/ToolTipContext.java | 16 ++++ .../tooltip/TooltipAwareButton.java | 7 +- .../tooltip/TooltipAwareToggleButton.java | 7 +- src/test/java/demo/toolTip/ToolTipDemo.java | 77 +++++++++--------- 6 files changed, 97 insertions(+), 39 deletions(-) create mode 100644 img/toolTip.gif create mode 100644 src/main/java/com/github/weisj/darklaf/components/tooltip/ToolTipAware.java diff --git a/img/toolTip.gif b/img/toolTip.gif new file mode 100644 index 0000000000000000000000000000000000000000..6a94e2ec3a974246ef3c448047c8510255c60b52 GIT binary patch literal 57500 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ⅇ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 literal 0 HcmV?d00001 diff --git a/src/main/java/com/github/weisj/darklaf/components/tooltip/ToolTipAware.java b/src/main/java/com/github/weisj/darklaf/components/tooltip/ToolTipAware.java new file mode 100644 index 00000000..d4da93d6 --- /dev/null +++ b/src/main/java/com/github/weisj/darklaf/components/tooltip/ToolTipAware.java @@ -0,0 +1,29 @@ +/* + * MIT License + * + * Copyright (c) 2020 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.components.tooltip; + +public interface ToolTipAware { + + ToolTipContext getToolTipContext(); +} diff --git a/src/main/java/com/github/weisj/darklaf/components/tooltip/ToolTipContext.java b/src/main/java/com/github/weisj/darklaf/components/tooltip/ToolTipContext.java index 9f328254..d7b0450a 100644 --- a/src/main/java/com/github/weisj/darklaf/components/tooltip/ToolTipContext.java +++ b/src/main/java/com/github/weisj/darklaf/components/tooltip/ToolTipContext.java @@ -522,4 +522,20 @@ public class ToolTipContext implements ToolTipListener { valid = false; } } + + public Alignment getAlignment() { + return alignment; + } + + public Alignment getCenterAlignment() { + return centerAlignment; + } + + public AlignmentStrategy getAlignmentStrategy() { + return alignmentStrategy; + } + + public boolean isAlignInside() { + return alignInside; + } } diff --git a/src/main/java/com/github/weisj/darklaf/components/tooltip/TooltipAwareButton.java b/src/main/java/com/github/weisj/darklaf/components/tooltip/TooltipAwareButton.java index d9f1b60b..7dc6fbe5 100644 --- a/src/main/java/com/github/weisj/darklaf/components/tooltip/TooltipAwareButton.java +++ b/src/main/java/com/github/weisj/darklaf/components/tooltip/TooltipAwareButton.java @@ -29,7 +29,7 @@ import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; -public class TooltipAwareButton extends JButton { +public class TooltipAwareButton extends JButton implements ToolTipAware { private final ToolTipContext context = new ToolTipContext(this) .setAlignment(Alignment.CENTER) @@ -64,4 +64,9 @@ public class TooltipAwareButton extends JButton { public JToolTip createToolTip() { return context.getToolTip(); } + + @Override + public ToolTipContext getToolTipContext() { + return context; + } } diff --git a/src/main/java/com/github/weisj/darklaf/components/tooltip/TooltipAwareToggleButton.java b/src/main/java/com/github/weisj/darklaf/components/tooltip/TooltipAwareToggleButton.java index e5835570..d389870e 100644 --- a/src/main/java/com/github/weisj/darklaf/components/tooltip/TooltipAwareToggleButton.java +++ b/src/main/java/com/github/weisj/darklaf/components/tooltip/TooltipAwareToggleButton.java @@ -29,7 +29,7 @@ import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; -public class TooltipAwareToggleButton extends JToggleButton { +public class TooltipAwareToggleButton extends JToggleButton implements ToolTipAware { private final ToolTipContext context = new ToolTipContext(this) .setAlignment(Alignment.CENTER) @@ -64,4 +64,9 @@ public class TooltipAwareToggleButton extends JToggleButton { public JToolTip createToolTip() { return context.getToolTip(); } + + @Override + public ToolTipContext getToolTipContext() { + return context; + } } diff --git a/src/test/java/demo/toolTip/ToolTipDemo.java b/src/test/java/demo/toolTip/ToolTipDemo.java index 42f83852..49ae74e3 100644 --- a/src/test/java/demo/toolTip/ToolTipDemo.java +++ b/src/test/java/demo/toolTip/ToolTipDemo.java @@ -23,54 +23,57 @@ */ package demo.toolTip; -import com.github.weisj.darklaf.LafManager; import com.github.weisj.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.components.alignment.AlignmentStrategy; import com.github.weisj.darklaf.components.tooltip.ToolTipContext; +import com.github.weisj.darklaf.components.tooltip.TooltipAwareButton; +import demo.ComponentDemo; +import demo.DemoPanel; import javax.swing.*; import java.awt.*; -import java.awt.event.MouseEvent; -public class ToolTipDemo { +public class ToolTipDemo implements ComponentDemo { public static void main(final String[] args) { - //Todo Rework Demo - SwingUtilities.invokeLater(() -> { - LafManager.install(); - JFrame f = new JFrame(); - JPanel p = new JPanel(new GridBagLayout()); - p.add(new JButton("Button with very very long text") { - private final ToolTipContext context = new ToolTipContext(this).setAlignment(Alignment.CENTER) - .setCenterAlignment(Alignment.SOUTH_EAST); - - { - setToolTipText("ToolTip \n multiline \n third line's a charm"); -// setToolTipText("ToolTip"); - } - - @Override - protected void paintComponent(final Graphics g) { - super.paintComponent(g); - g.setColor(Color.RED); - g.fillRect(getWidth() / 2, getHeight() / 2, 1, 1); - } + ComponentDemo.showDemo(new ToolTipDemo()); + } - @Override - public Point getToolTipLocation(final MouseEvent event) { - return context.getToolTipLocation(event); - } + @Override + public JComponent createComponent() { + TooltipAwareButton button = new TooltipAwareButton("Demo Button"); + DemoPanel panel = new DemoPanel(button); + ToolTipContext context = button.getToolTipContext(); + button.setToolTipText("ToolTip demo text!"); - @Override - public JToolTip createToolTip() { - return context.getToolTip(); - } + JPanel controlPanel = panel.getControls(); + controlPanel.setLayout(new GridLayout(4, 2)); + controlPanel.add(new JLabel()); + controlPanel.add(new JCheckBox("Align inside") {{ + setSelected(context.isAlignInside()); + addActionListener(e -> context.setAlignInside(isSelected())); + }}); + controlPanel.add(new JLabel("Alignment:", JLabel.RIGHT)); + controlPanel.add(new JComboBox(Alignment.values()) {{ + setSelectedItem(context.getAlignment()); + addItemListener(e -> context.setAlignment((Alignment) e.getItem())); + }}); + controlPanel.add(new JLabel("Center Alignment:", JLabel.RIGHT)); + controlPanel.add(new JComboBox(Alignment.values()) {{ + setSelectedItem(context.getCenterAlignment()); + addItemListener(e -> context.setCenterAlignment((Alignment) e.getItem())); + }}); + controlPanel.add(new JLabel("Alignment Strategy:", JLabel.RIGHT)); + controlPanel.add(new JComboBox(AlignmentStrategy.values()) {{ + setSelectedItem(context.getAlignmentStrategy()); + addItemListener(e -> context.setAlignmentStrategy((AlignmentStrategy) e.getItem())); + }}); + return panel; + } - }); - f.setContentPane(p); - f.setLocationRelativeTo(null); - f.setSize(100, 100); - f.setVisible(true); - }); + @Override + public String getTitle() { + return "ToolTip Demo"; } }