Skip to content

Instantly share code, notes, and snippets.

@resarahadian
Created December 6, 2013 23:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save resarahadian/7833810 to your computer and use it in GitHub Desktop.
Save resarahadian/7833810 to your computer and use it in GitHub Desktop.
Membuat Tombol Close TabbedPane
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.*;
@SuppressWarnings("serial")
public class ClExitTab extends JTabbedPane{
private TabCloseUI closeUI = new TabCloseUI(this);
public void paint(Graphics g){
super.paint(g);
closeUI.paint(g);
}
public void addTab(String title, Component component) {
super.addTab(title+" ", component);
}
public String getTabTitleAt(int index) {
return super.getTitleAt(index).trim();
}
private class TabCloseUI implements MouseListener, MouseMotionListener {
private ClExitTab tabbedPane;
private int closeX = 0 ,closeY = 0, meX = 0, meY = 0;
private int selectedTab;
private final int width = 8, height = 8;
private Rectangle rectangle = new Rectangle(0,0,width, height);
@SuppressWarnings("unused")
private TabCloseUI(){}
public TabCloseUI(ClExitTab pane) {
tabbedPane = pane;
tabbedPane.addMouseMotionListener(this);
tabbedPane.addMouseListener(this);
}
public void mouseEntered(MouseEvent me) {}
public void mouseExited(MouseEvent me) {}
public void mousePressed(MouseEvent me) {}
public void mouseClicked(MouseEvent me) {}
public void mouseDragged(MouseEvent me) {}
public void mouseReleased(MouseEvent me) {
if(closeUnderMouse(me.getX(), me.getY())){
boolean isToCloseTab = tabAboutToClose(selectedTab);
if (isToCloseTab && selectedTab > -1){
tabbedPane.removeTabAt(selectedTab);
}
selectedTab = tabbedPane.getSelectedIndex();
}
}
public void mouseMoved(MouseEvent me) {
meX = me.getX();
meY = me.getY();
if(mouseOverTab(meX, meY)){
controlCursor();
tabbedPane.repaint();
}
}
private void controlCursor() {
if(tabbedPane.getTabCount()>0)
if(closeUnderMouse(meX, meY)){
tabbedPane.setCursor(new Cursor(Cursor.HAND_CURSOR));
if(selectedTab > -1)
tabbedPane.setToolTipTextAt(selectedTab, "Close " +tabbedPane.getTitleAt(selectedTab));
}
else{
tabbedPane.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
if(selectedTab > -1)
tabbedPane.setToolTipTextAt(selectedTab,"");
}
}
private boolean closeUnderMouse(int x, int y) {
rectangle.x = closeX;
rectangle.y = closeY;
return rectangle.contains(x,y);
}
public void paint(Graphics g) {
int tabCount = tabbedPane.getTabCount();
for(int j = 0; j < tabCount; j++)
if(tabbedPane.getComponent(j).isShowing()){
int x = tabbedPane.getBoundsAt(j).x + tabbedPane.getBoundsAt(j).width -width-5;
int y = tabbedPane.getBoundsAt(j).y +5;
drawClose(g,x,y);
break;
}
if(mouseOverTab(meX, meY)){
drawClose(g,closeX,closeY);
}
}
private void drawClose(Graphics g, int x, int y) {
if(tabbedPane != null && tabbedPane.getTabCount() > 0){
Graphics2D g2 = (Graphics2D)g;
drawColored(g2, isUnderMouse(x,y)? Color.RED : Color.WHITE, x, y);
}
}
private void drawColored(Graphics2D g2, Color color, int x, int y) {
g2.setStroke(new BasicStroke(5,BasicStroke.JOIN_ROUND,BasicStroke.CAP_ROUND));
g2.setColor(Color.BLACK);
g2.drawLine(x, y, x + width, y + height);
g2.drawLine(x + width, y, x, y + height);
g2.setColor(color);
g2.setStroke(new BasicStroke(3, BasicStroke.JOIN_ROUND, BasicStroke.CAP_ROUND));
g2.drawLine(x, y, x + width, y + height);
g2.drawLine(x + width, y, x, y + height);
}
private boolean isUnderMouse(int x, int y) {
if(Math.abs(x-meX)<width && Math.abs(y-meY)<height )
return true;
return false;
}
private boolean mouseOverTab(int x, int y) {
int tabCount = tabbedPane.getTabCount();
for(int j = 0; j < tabCount; j++)
if(tabbedPane.getBoundsAt(j).contains(meX, meY)){
selectedTab = j;
closeX = tabbedPane.getBoundsAt(j).x + tabbedPane.getBoundsAt(j).width -width-5;
closeY = tabbedPane.getBoundsAt(j).y +5;
return true;
}
return false;
}
}
public boolean tabAboutToClose(int tabIndex) {
return true;
}
}
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.UIManager;
@SuppressWarnings("serial")
public class frameExitTab extends JFrame {
private JPanel contentPane;
private JMenuBar menuBar;
private JMenu mnFile;
private JMenuItem tabBaru;
private JMenuItem miDeleteTab;
private JPanel panel1;
ImageIcon iconTab;
private JLabel lblWall;
private ClExitTab tabbedPane;
/**
* Create the frame.
*/
public frameExitTab() {
setTitle("Exit Button TabbedPane");
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 756, 501);
menuBar = new JMenuBar();
setJMenuBar(menuBar);
mnFile = new JMenu("File");
menuBar.add(mnFile);
tabBaru = new JMenuItem("New Tab");
tabBaru.setIcon(new ImageIcon("/home/resa/Aplikasi Java/SwingJava/src/exitButtonTab/newTab.png"));
tabBaru.addActionListener(new exitButtonTabAct());
mnFile.add(tabBaru);
miDeleteTab = new JMenuItem("Delete Tab");
miDeleteTab.setIcon(new ImageIcon("/home/resa/Aplikasi Java/SwingJava/src/exitButtonTab/deleteTab.png"));
miDeleteTab.addActionListener(new exitButtonTabAct());
mnFile.add(miDeleteTab);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
tabbedPane = new ClExitTab();
tabbedPane.setBounds(0, 0, 754, 470);
contentPane.add(tabbedPane);
iconTab = new ImageIcon("src/exitButtonTab/newTab.png");
panel1 = new JPanel();
tabbedPane.addTab("New tab", iconTab, panel1, null);
panel1.setLayout(null);
lblWall = new JLabel("");
lblWall.setIcon(new ImageIcon("/home/resa/Aplikasi Java/SwingJava/src/exitButtonTab/wall.jpg"));
lblWall.setBounds(0, -14, 754, 434);
panel1.add(lblWall);
setLocationRelativeTo(null);
}
public class exitButtonTabAct implements ActionListener
{
@Override
public void actionPerformed(ActionEvent act) {
// TODO Auto-generated method stub
String tab = act.getActionCommand();
if(tab.equals("New Tab"))
{
tab = "New Tab";
if(!tab.equals(""))
{
JPanel panel2 = new JPanel();
JLabel lbl = new JLabel();
lbl.setIcon(new ImageIcon("/home/resa/Aplikasi Java/SwingJava/src/exitButtonTab/wall.jpg"));
panel2.add(lbl);
tabbedPane.addTab("New tab", iconTab, panel2, null);
}
}
else if(tab.equals("Delete Tab"))
{
tabbedPane.remove(tabbedPane.getTabCount()-1);
}
}
}
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
frameExitTab frame = new frameExitTab();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment