You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
4.9 KiB
156 lines
4.9 KiB
/*
|
|
* Copyright (c) 2000-2017 TeamDev Ltd. All rights reserved.
|
|
* TeamDev PROPRIETARY and CONFIDENTIAL.
|
|
* Use is subject to license terms.
|
|
*/
|
|
|
|
package com.example.jxbrowser;
|
|
|
|
|
|
import com.example.jxbrowser.resources.Resources;
|
|
|
|
import javax.swing.*;
|
|
import java.awt.*;
|
|
import java.awt.event.ActionEvent;
|
|
import java.awt.event.ActionListener;
|
|
import java.awt.event.MouseAdapter;
|
|
import java.awt.event.MouseEvent;
|
|
import java.beans.PropertyChangeEvent;
|
|
import java.beans.PropertyChangeListener;
|
|
|
|
/**
|
|
* @author TeamDev Ltd.
|
|
*/
|
|
public class TabCaption extends JPanel {
|
|
|
|
private boolean selected;
|
|
private TabCaptionComponent component;
|
|
|
|
public TabCaption() {
|
|
setLayout(new BorderLayout());
|
|
setOpaque(false);
|
|
add(createComponent(), BorderLayout.CENTER);
|
|
add(Box.createHorizontalStrut(1), BorderLayout.EAST);
|
|
}
|
|
|
|
private JComponent createComponent() {
|
|
component = new TabCaptionComponent();
|
|
component.addPropertyChangeListener("CloseButtonPressed", new PropertyChangeListener() {
|
|
public void propertyChange(PropertyChangeEvent evt) {
|
|
firePropertyChange("CloseButtonPressed", evt.getOldValue(), evt.getNewValue());
|
|
}
|
|
});
|
|
component.addPropertyChangeListener("TabClicked", new PropertyChangeListener() {
|
|
public void propertyChange(PropertyChangeEvent evt) {
|
|
setSelected(true);
|
|
}
|
|
});
|
|
return component;
|
|
}
|
|
|
|
@Override
|
|
public Dimension getPreferredSize() {
|
|
return new Dimension(155, 26);
|
|
}
|
|
|
|
@Override
|
|
public Dimension getMinimumSize() {
|
|
return new Dimension(50, 26);
|
|
}
|
|
|
|
@Override
|
|
public Dimension getMaximumSize() {
|
|
return getPreferredSize();
|
|
}
|
|
|
|
public void setTitle(String title) {
|
|
component.setTitle(title);
|
|
}
|
|
|
|
public boolean isSelected() {
|
|
return selected;
|
|
}
|
|
|
|
public void setSelected(boolean selected) {
|
|
boolean oldValue = this.selected;
|
|
this.selected = selected;
|
|
component.setSelected(selected);
|
|
firePropertyChange("TabSelected", oldValue, selected);
|
|
}
|
|
|
|
private static class TabCaptionComponent extends JPanel {
|
|
|
|
private final Color defaultBackground;
|
|
private JLabel label;
|
|
|
|
private TabCaptionComponent() {
|
|
defaultBackground = getBackground();
|
|
setLayout(new BorderLayout());
|
|
setOpaque(false);
|
|
add(createLabel(), BorderLayout.CENTER);
|
|
add(createCloseButton(), BorderLayout.EAST);
|
|
}
|
|
|
|
private JComponent createLabel() {
|
|
label = new JLabel();
|
|
label.setOpaque(false);
|
|
label.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
|
|
label.addMouseListener(new MouseAdapter() {
|
|
@Override
|
|
public void mousePressed(MouseEvent e) {
|
|
if (e.getButton() == MouseEvent.BUTTON1) {
|
|
firePropertyChange("TabClicked", false, true);
|
|
}
|
|
if (e.getButton() == MouseEvent.BUTTON2) {
|
|
firePropertyChange("CloseButtonPressed", false, true);
|
|
}
|
|
}
|
|
});
|
|
return label;
|
|
}
|
|
|
|
private JComponent createCloseButton() {
|
|
JButton closeButton = new JButton();
|
|
closeButton.setOpaque(false);
|
|
closeButton.setToolTipText("Close");
|
|
closeButton.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));
|
|
closeButton.setPressedIcon(Resources.getIcon("close-pressed.png"));
|
|
closeButton.setIcon(Resources.getIcon("close.png"));
|
|
closeButton.setContentAreaFilled(false);
|
|
closeButton.setFocusable(false);
|
|
closeButton.addActionListener(new ActionListener() {
|
|
public void actionPerformed(ActionEvent e) {
|
|
firePropertyChange("CloseButtonPressed", false, true);
|
|
}
|
|
});
|
|
return closeButton;
|
|
}
|
|
|
|
public void setTitle(final String title) {
|
|
SwingUtilities.invokeLater(new Runnable() {
|
|
public void run() {
|
|
label.setText(title);
|
|
label.setToolTipText(title);
|
|
}
|
|
});
|
|
}
|
|
|
|
public void setSelected(boolean selected) {
|
|
setBackground(selected ? defaultBackground : new Color(150, 150, 150));
|
|
repaint();
|
|
}
|
|
|
|
@Override
|
|
public void paint(Graphics g) {
|
|
Graphics2D g2d = (Graphics2D) g.create();
|
|
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
|
|
RenderingHints.VALUE_ANTIALIAS_ON);
|
|
g2d.setPaint(
|
|
new GradientPaint(0, 0, Color.LIGHT_GRAY, 0, getHeight(), getBackground()));
|
|
g2d.fillRect(0, 0, getWidth(), getHeight());
|
|
g2d.dispose();
|
|
super.paint(g);
|
|
}
|
|
}
|
|
}
|