タイトル
 メニューにないコーナーはTopからいけます
TOPJavaSwingJTabbedPane → This Page

JTabbedPane@Swing サンプル10

概要

Java - Swing - JTabbedPane のサンプルです。
・タブに閉じるボタンを追加

解説

タブに閉じるボタン(アイコン)を追加しています。
閉じるボタン(アイコン)をクリックすると、そのタブが閉じられます。

サンプルイメージ

サンプル画像


サンプルソース

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;

/**
 * JTabbedPane サンプル10
 * ・タブに閉じるボタンを追加
 * 
 * @author みっちー
 */
public class JTabbedPane10 extends JFrame {
	
	private static final long serialVersionUID = 1L;
	
	/**
	 * 開始メソッド
	 * 
	 * @param args	パラメータ
	 */
	public static void main(String[] args) {
		JTabbedPane10 frame = new JTabbedPane10();
		
		// 閉じるボタンをクリックされた場合の動作を設定
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// ウインドウのタイトルを設定
		frame.setTitle("JTabbedPane サンプル10");
		
		// フレームの X座標、Y座標、幅、高さを設定
		frame.setBounds(100, 200, 400, 200);
		
		// フレームを表示(これをしないと透明のフレームが立ち上がってしまう)
		frame.setVisible(true);
	}
	
	/**
	 * コンストラクタ
	 */
	public JTabbedPane10() {
		// タブパネを生成
		TabbedPaneEx tabPane = new TabbedPaneEx();
		
		// タブを追加
		tabPane.addTab("File", new JButton("button"));
		tabPane.addTab("Edit", new JButton("button"));
		tabPane.addTab("Help", new JButton("button"));
		
		// ニーモニックを設定
		tabPane.setMnemonicAt(0, KeyEvent.VK_F);
		tabPane.setMnemonicAt(1, KeyEvent.VK_E);
		tabPane.setMnemonicAt(2, KeyEvent.VK_H);
		
		// 見やすいようにフォントを変更
		tabPane.setFont(new Font("MS ゴシック", Font.BOLD, 24));
		
		// パネを追加
		getContentPane().add(tabPane);
	}
}

class TabbedPaneEx extends JTabbedPane {
	
	private static final long serialVersionUID = 1L;
	
	private final ImageIcon icon;
	private final Dimension buttonSize;
	
	/**
	 * コンストラクタ
	 */
	public TabbedPaneEx() {
		super();
		
		// 閉じるボタンのアイコンとサイズ
		this.icon = new ImageIcon("./img/close.png");
		buttonSize = new Dimension(icon.getIconWidth() + 5, icon.getIconHeight());
	}
	
	/**
	 * タブ追加
	 * 
	 * @param title	タイトル
	 * @param component	コンポーネント
	 */
	public void addTab(String title, final JComponent component) {
		// パネルを生成
		JPanel panel = new JPanel(new BorderLayout());
		panel.setOpaque(false);
		
		// ラベルを生成
		JLabel label = new JLabel(title);
		label.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 4));
		
		// ボタンを生成
		JButton button = new JButton(icon);
		button.setPreferredSize(buttonSize);
		button.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				removeTabAt(indexOfComponent(component));
			}
		});
		
		// パネルにラベルとボタンを追加
		panel.add(label,  BorderLayout.WEST);
		panel.add(button, BorderLayout.EAST);
		super.addTab(null, component);
		setTabComponentAt(getTabCount() - 1, panel);
	}
}

サンプルソースのダウンロード

ソースのダウンロード(Eclipse用のプロジェクトファイルも同梱)

更新履歴

2016/08/27 新規作成


TOPJavaSwingJTabbedPane → This Page
Valid CSS!