为JTabbedPane添加关闭按钮与滚动条

前言

白天遇到的窒息问题,晚上回来用自己的电脑写了一下,却没有遇到,mmp呦,明天去再对一下代码,这里记录一下,这份代码没啥问题

结构

在这里插入图片描述

代码

增加选项卡

import java.awt.GridLayout;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import javax.swing.JLabel;

import javax.swing.JPanel;

 

public class addTab implements MouseListener{

    JPanel jp;

    JLabel lab ;

    JLabel lab3=new JLabel();

    public addTab(JPanel panel){

       lab= new JLabel("选项卡1");

       JLabel lab1 = new JLabel("选项卡");

        jp=new JPanel();

       GridLayout gl= new GridLayout(1,1,10,0);

       jp.setLayout(gl);

       lab1.setHorizontalAlignment(JLabel.LEFT);//设置文字显示在最左边

       lab3.setHorizontalAlignment(JLabel.RIGHT);// 设置文字显示在最右边

       jp.add(lab1);

       jp.add(lab3);

       MainFrame.pane.addTab("i",panel);

       MainFrame.pane.setTabComponentAt(MainFrame.pane.indexOfComponent(panel),jp);//实现这个功能的就这一条最重要的语句

       lab3.addMouseListener(this);

    }

    @Override

    public void mouseClicked(MouseEvent arg0) {

       // TODO Auto-generated method stub

    	MainFrame.pane.remove(MainFrame.pane.indexOfTabComponent(jp));

    }

    @Override

    public void mouseEntered(MouseEvent e) {

       // TODO Auto-generated method stub

       lab3.setText("x ");

    }

    @Override

    public void mouseExited(MouseEvent arg0) {

       // TODO Auto-generated method stub

       lab3.setText("");

    }

    @Override

    public void mousePressed(MouseEvent arg0) {

       // TODO Auto-generated method stub

    }

    @Override

    public void mouseReleased(MouseEvent arg0) {

       // TODO Auto-generated method stub

    }

}

主方法

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTabbedPane;
import javax.swing.JPanel;
import java.awt.Dimension;
import javax.swing.JScrollPane;
import javax.swing.BoxLayout;

public class MainFrame extends JFrame{
	private static final long serialVersionUID = 1L;
	static JTabbedPane pane;

	public MainFrame()	{
		super("选项卡窗格");
		setVisible(true);
		setSize(400, 300);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JScrollPane scrollPane = new JScrollPane();
		getContentPane().add(scrollPane);
		JPanel panel = new JPanel();
		scrollPane.setViewportView(panel);
		panel.setLayout(null);
		panel.setPreferredSize(new Dimension(400,300));
		
		JMenuItem mi = new JMenuItem("增加");
		JMenu menu = new JMenu("增加");
		menu.add(mi);
		JMenuBar bar = new JMenuBar();
		bar.add(menu);
		setJMenuBar(bar);
		getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.X_AXIS));		

		pane = new JTabbedPane();
		pane.setBounds(0, 0, 300, 200);
		pane.setVisible(true);
		
		panel.add(pane);
		new addTab(new Panel2());
		new addTab(new Panel());

		mi.addActionListener(event ->  {
			new addTab(new Panel());
		});

	}

	public static void main(String[] args) throws Exception{

		new MainFrame();
	}
}


panel添加滚动条

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JComboBox;

public class Panel extends JPanel {

	/**
	 * Create the panel.
	 */
	public Panel() {
		setBounds(0, 0, 200, 300);
		setLayout(new BorderLayout(0, 0));
		
		JScrollPane scrollPane = new JScrollPane();
		add(scrollPane);
		JPanel panel = new JPanel();
		scrollPane.setViewportView(panel);
		panel.setLayout(null);
		panel.setPreferredSize(new Dimension(400,300));
		
		JButton btnNewButton = new JButton("New button");
		btnNewButton.setBounds(30, 223, 113, 27);
		panel.add(btnNewButton);
		
		JComboBox comboBox = new JComboBox();
		comboBox.setBounds(200, 250, 37, 24);
		panel.add(comboBox);

	}
	public static void main(String[] args) {
		new Panel();
	}
}

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JButton;

public class Panel2 extends JPanel {

	/**
	 * Create the panel.
	 */
	public Panel2() {
		setBounds(0, 0, 200, 300);
		setLayout(new BorderLayout(0, 0));
		
		JScrollPane scrollPane = new JScrollPane();
		add(scrollPane);
		JPanel panel = new JPanel();
		scrollPane.setViewportView(panel);
		panel.setLayout(null);
		panel.setPreferredSize(new Dimension(400,300));
		
		JButton btnNewButton = new JButton("New button");
		btnNewButton.setBounds(30, 223, 113, 27);
		panel.add(btnNewButton);

	}
	public static void main(String[] args) {
		new Panel2();
	}
}

晚安

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 MATLAB 的 Tab 标题栏上添加关闭按钮,可以使用以下代码: ```matlab % 创建一个 Tab 组件对象 hTabGroup = uitabgroup('Parent', figure); hTab = uitab(hTabGroup, 'Title', 'Tab 1'); % 获取 Tab 标题栏的 Java 组件对象 jTabGroup = get(handle(hTabGroup), 'JavaFrame'); jTabbedPane = jTabGroup.fFigureClient.getComponents; jTabbedPane = jTabbedPane(1).getComponents; % 创建一个关闭按钮 jButton = javaObjectEDT('javax.swing.JButton', '关闭'); jButton.setFocusable(false); jButton.setBorder([]); % 将按钮添加到 Tab 标题栏 jTabbedPane(1).add(jButton); % 设置按钮的位置和大小 tabRect = jTabbedPane(1).getBoundsAt(jTabbedPane(1).indexOfComponent(hTab)); buttonSize = 16; buttonRect = java.awt.Rectangle(tabRect.width - buttonSize - 2, (tabRect.height - buttonSize) / 2, buttonSize, buttonSize); jButton.setBounds(buttonRect); % 添加按钮的回调函数 set(handle(jButton, 'CallbackProperties'), 'ActionPerformedCallback', @(~,~)delete(hTab)); ``` 这里首先创建一个 Tab 组件对象 `hTabGroup` 和 Tab 对象 `hTab`,然后通过 `get(handle(hTabGroup), 'JavaFrame')` 获取 Tab 标题栏的 Java 组件对象 `jTabGroup`,并通过 `jTabGroup.fFigureClient.getComponents` 和 `jTabbedPane(1).getComponents` 获取 TabbedPane 对象 `jTabbedPane`。 接着,使用 `javaObjectEDT` 函数创建一个关闭按钮 `jButton`,并将其添加到 Tab 标题栏上。使用 `jTabbedPane(1).getBoundsAt` 函数和 `java.awt.Rectangle` 类计算按钮的位置和大小,并使用 `jButton.setBounds` 函数设置按钮的位置和大小。 最后,为按钮添加回调函数,使其在被点击时删除对应的 Tab 对象。需要注意的是,MATLAB 中的回调函数必须是函数句柄,因此使用 `handle` 函数将 Java 对象转换为 MATLAB 对象,并使用 `set` 函数设置回调函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值