/* * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of Oracle or the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ //http://docs.oracle.com/javase/tutorial/uiswing/examples/components/TabC omponentsDemoProject/src/components/ButtonTabComponent.java package gerenciador; import import import import javax.swing.*; javax.swing.plaf.basic.BasicButtonUI; java.awt.*; java.awt.event.*; public class ButtonTabComponent extends JPanel { private static final long serialVersionUID = 1L; private final JTabbedPane pane; // CONSTRUTOR // Início... public ButtonTabComponent(final JTabbedPane pane) { // unset default FlowLayout' gaps super(new FlowLayout(FlowLayout.LEFT, 0, 0)); if (pane == null) { throw new NullPointerException("TabbedPane is null"); } this.pane = pane; setOpaque(false); // faz a JLabel ler o título do JTabbedPane JLabel label = new JLabel() { private static final long serialVersionUID = 1L; public String getText() { int i = pane.indexOfTabComponent(ButtonTabComponent.this); if (i != -1) { return pane.getTitleAt(i); } return null; } }; add(label); // adiciona mais espaço entre a label e o botão label.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5)); // tab button JButton button = new TabButton(); add(button); // adiciona mais espaço para o topo do componente setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 0)); }// Fim do construtor. // // CLASSE TABBUTTON // // Define as características do botão fechar. // // Início private class TabButton extends JButton implements ActionListener { private static final long serialVersionUID = 1L; public TabButton() { int size = 17; setPreferredSize(new Dimension(size, size)); setToolTipText("Fechar esta aba"); setCursor(new Cursor(Cursor.HAND_CURSOR)); // Faz o botão ser igual para todas as Laf's setUI(new BasicButtonUI()); // Torna-o transparente setContentAreaFilled(false); // Não necessidade de estar com focusable setFocusable(false); setBorder(BorderFactory.createEtchedBorder()); setBorderPainted(false); // Fazendo um efeito de rolagem // usamos o mesmo listener para todos os botões addMouseListener(buttonMouseListener); setRolloverEnabled(true); // Fecha a guia apropriada, clicando no botão addActionListener(this); } public void actionPerformed(ActionEvent e) { int i = pane.indexOfTabComponent(ButtonTabComponent.this); if (i != -1) { pane.remove(i); } } // pinta o X protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g.create(); // mudança na imagem para botões pressionados if (getModel().isPressed()) { g2.translate(1, 1); } g2.setStroke(new BasicStroke(2)); g2.setColor(Color.RED); if (getModel().isRollover()) { g2.setColor(Color.RED); } int delta = 6; g2.drawLine(delta, delta, getWidth() - delta - 1, getHeight() - delta - 1); g2.drawLine(getWidth() - delta - 1, delta, delta, getHeight() - delta - 1); g2.dispose(); } }// Fim da classe TabButton. // // MOUSELISTENER // // Define os eventos de entrada e saida do mouse. // // Início... private final static MouseListener buttonMouseListener = new MouseAdapter() { public void mouseEntered(MouseEvent e) { Component component = e.getComponent(); if (component instanceof AbstractButton) { AbstractButton button = (AbstractButton) component; button.setBorderPainted(true); } } public void mouseExited(MouseEvent e) { Component component = e.getComponent(); if (component instanceof AbstractButton) { AbstractButton button = (AbstractButton) component; button.setBorderPainted(false); } } };// Fim dos Listeners. }