Java 所有选项卡末尾的一个按钮,用于关闭窗口

Java 所有选项卡末尾的一个按钮,用于关闭窗口,java,tabs,jbutton,jtabbedpane,Java,Tabs,Jbutton,Jtabbedpane,我需要将最小化和关闭按钮放在我的JTabbedPane结束的右角。为清晰起见,环绕区域是我需要的两个按钮(我有一个未装饰的框架) 有谁能指导我如何做到这一点?我的问题是(更多)按钮的定位(在JTabbedPane上),而不是实现最小化/关闭功能 谢谢大家! 作为子项添加到JTabbedPane的所有组件都将包装在选项卡中。这意味着无法将按钮直接添加到JTabbedPane。如果希望将关闭和最小化按钮直接作为选项卡式窗格的一部分(而不是稍微偏侧),我建议在选项卡式窗格中添加两个选项卡,其中包含自

我需要将最小化和关闭按钮放在我的
JTabbedPane
结束的右角。为清晰起见,环绕区域是我需要的两个按钮(我有一个未装饰的框架)

有谁能指导我如何做到这一点?我的问题是(更多)按钮的定位(在JTabbedPane上),而不是实现最小化/关闭功能


谢谢大家!

作为子项添加到JTabbedPane的所有组件都将包装在选项卡中。这意味着无法将按钮直接添加到JTabbedPane。如果希望将关闭和最小化按钮直接作为选项卡式窗格的一部分(而不是稍微偏侧),我建议在选项卡式窗格中添加两个选项卡,其中包含自定义选项卡组件(
JTabbedPane.setTabComponentAt()
)。由于按钮是选项卡的唯一组件,因此无法选择实际的“选项卡”本身,只有按钮事件才会发生。使用JTabbedPane无法固定选项卡的位置,这将导致这两个“按钮选项卡”在您选择的布局中浮动。在选项卡的左侧插入更多的选项卡会产生这样的效果,即始终使用“关闭”和“最小化”按钮结束选项卡列表。

我找到了解决此问题的方法:只需在选项卡窗格旁边放置一个工具栏

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;

import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;

import javax.swing.JTabbedPane;

import java.awt.FlowLayout;
import java.awt.Insets;

import javax.swing.JToolBar;

import java.awt.ComponentOrientation;

import javax.swing.JButton;

import java.awt.Cursor;

public class PanelTab extends JFrame {

private JPanel contentPane;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    try {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (ClassNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (InstantiationException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (IllegalAccessException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (UnsupportedLookAndFeelException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                PanelTab frame = new PanelTab();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public PanelTab() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);

    GridBagLayout gbl_contentPane = new GridBagLayout();
    gbl_contentPane.columnWidths = new int[] { 424, 0 };
    gbl_contentPane.rowHeights = new int[] { 51, 0 };
    gbl_contentPane.columnWeights = new double[] { 1.0, Double.MIN_VALUE };
    gbl_contentPane.rowWeights = new double[] { 1.0, Double.MIN_VALUE };
    contentPane.setLayout(gbl_contentPane);

    JPanel panel = new JPanel();
    GridBagConstraints gbc_panel = new GridBagConstraints();
    gbc_panel.fill = GridBagConstraints.BOTH;
    gbc_panel.gridx = 0;
    gbc_panel.gridy = 0;
    contentPane.add(panel, gbc_panel);

    GridBagLayout gbl_panel = new GridBagLayout();
    gbl_panel.columnWidths = new int[] { 184, 0 };
    gbl_panel.rowHeights = new int[] { 54, 0 };
    gbl_panel.columnWeights = new double[] { 1.0, Double.MIN_VALUE };
    gbl_panel.rowWeights = new double[] { 1.0, Double.MIN_VALUE };
    panel.setLayout(gbl_panel);

    JToolBar toolBar = new JToolBar();
    toolBar.setOpaque(false);
    toolBar.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
    toolBar.setFloatable(false); // The toolbar must not be float

    GridBagConstraints gbc_toolBar = new GridBagConstraints();
    gbc_toolBar.anchor = GridBagConstraints.NORTHEAST;
    gbc_toolBar.gridx = 0;
    gbc_toolBar.gridy = 0;
    panel.add(toolBar, gbc_toolBar);

    JButton btnHola = new JButton("You must put your exit icon here");
    btnHola.setOpaque(false);
    toolBar.add(btnHola);

    JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
    GridBagConstraints gbc_tabbedPane = new GridBagConstraints();
    gbc_tabbedPane.fill = GridBagConstraints.BOTH;
    gbc_tabbedPane.gridx = 0;
    gbc_tabbedPane.gridy = 0;
    panel.add(tabbedPane, gbc_tabbedPane);

    JPanel panel_1 = new JPanel();
    tabbedPane.addTab("New tab", null, panel_1, null);
}
}

我想这可能会帮助您……

您使用的是IDE吗?哪一个?关于这个要求,你有其他的背景吗?这是一个独立的文档还是一个更大的html页面的一部分?一个可能的解决方案是使用CSS“position:absolute”,并使用right/top和margin/padding来定位它。如果这个想法行不通,你能提供关于这个问题的更多细节吗?我所有的代码都使用Eclipse。我没有用于GUI设计的IDE。如果我不清楚,这就是我所需要的:我有一个未修饰的JFrame,我在它上面添加了一个JTabbedPane(JTabbedPane上依次有4个选项卡)。我想在我的JTabbedPane的末尾有两个按钮,如上图所示。到目前为止,我还不存在图像的包围部分(它只是通过图像编辑器添加的我的需求的表示)