如何隐藏JTabbedPane的Focus选项卡以外的选项卡

时间:2014-12-11 12:03:02

标签: java swing tabs jtabbedpane

在我的应用程序中,每个选项卡都有关闭按钮。我想在选项卡未聚焦/选中时隐藏关闭按钮。这是我的问题是我想隐藏每个创建的选项卡的关闭按钮除焦点/选中选项卡外。每当我选择特定选项卡,然后只应启用关闭按钮。如何在未聚焦时禁用关闭按钮。请帮助我。谢谢。

我的工作范例:

public class CloseCurrentTab extends javax.swing.JFrame {
JTextArea tx;
int i=0;
public CloseCurrentTab() {
    initComponents();
}
@SuppressWarnings("unchecked")                        
private void initComponents() {
    tabbedPane = new CloseButtonTabbedPane();
    jMenuBar1 = new javax.swing.JMenuBar();
    jMenu1 = new javax.swing.JMenu();
    create = new javax.swing.JMenuItem();
    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    jMenu1.setText("File");
    create.setText("Create");
    create.addActionListener(new java.awt.event.ActionListener() {
        @Override
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            createActionPerformed(evt);
        }
    });
    jMenu1.add(create);
    jMenuBar1.add(jMenu1);
    setJMenuBar(jMenuBar1);
    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(tabbedPane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(tabbedPane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 331, Short.MAX_VALUE)
    );
    pack();
}                     

private void createActionPerformed(java.awt.event.ActionEvent evt) {                                       
    i++;
    tx = new JTextArea();
    tx.setFont(new java.awt.Font("Miriam Fixed", 0, 13));
    JScrollPane  scrollpane=new JScrollPane(tx);
    tabbedPane.addTab("Doc"+i, scrollpane);
    tabbedPane.setSelectedIndex(i-1);
    pack();
}                                      
public static void main(String args[]) {
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(CloseCurrentTab.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    java.awt.EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            new CloseCurrentTab().setVisible(true);
        }
    });
}              
private javax.swing.JMenuItem create;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenu2;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem open;
private javax.swing.JTabbedPane tabbedPane;     

public class CloseButtonTabbedPane extends JTabbedPane {
public CloseButtonTabbedPane() {
}
@Override
public void addTab(String title, Icon icon, Component component, String tip) {
    super.addTab(title, icon, component, tip);
    int count = this.getTabCount() - 1;
    setTabComponentAt(count, new CloseButtonTab(component, title, icon));
}
@Override
public void addTab(String title, Icon icon, Component component) {
    addTab(title, icon, component, null);
}
@Override
public void addTab(String title, Component component) {
    addTab(title, null, component);
}
public class CloseButtonTab extends JPanel {
    private Component tab;
    public CloseButtonTab(final Component tab, String title, Icon icon) {
        this.tab = tab;
        setOpaque(false);
        FlowLayout flowLayout = new FlowLayout(FlowLayout.CENTER, 3, 3);
        setLayout(flowLayout);
        setVisible(true);
        JLabel jLabel = new JLabel(title);
        jLabel.setIcon(icon);
        add(jLabel);
        JButton button = new JButton(MetalIconFactory.getInternalFrameCloseIcon(16));
        button.setMargin(new Insets(0, 0, 0, 0));
        button.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY, 1));
        button.addMouseListener(new MouseListener() {
            public void mouseClicked(MouseEvent e) {
                JTabbedPane tabbedPane = (JTabbedPane) getParent().getParent();
                tabbedPane.remove(tabbedPane.getSelectedIndex());
            }
            public void mousePressed(MouseEvent e) {
            }
            public void mouseReleased(MouseEvent e) {
            }
            public void mouseEntered(MouseEvent e) {
                JButton button = (JButton) e.getSource();
                button.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 1));
            }
            public void mouseExited(MouseEvent e) {
                JButton button = (JButton) e.getSource();
                button.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY, 1));
            }
        });
        add(button);
    }
}
}
}

0 个答案:

没有答案