/* * @(#)TabbedPaneTest.java 1.0 12 February 2005 * * Copyright (c) 2004 Werner Randelshofer, Immensee, Switzerland. * All rights reserved. * * You may not use, copy or modify this file, except in compliance with the * license agreement you entered into with Werner Randelshofer. * For details see accompanying license terms. */ package test; import ch.randelshofer.quaqua.*; import ch.randelshofer.quaqua.util.*; import java.awt.Component; import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import javax.swing.*; import javax.swing.border.EmptyBorder; /** * TabbedPaneTest. * * @author Werner Randelshofer * @version 1.0 12 February 2005 Created. */ public class TabbedPaneTest extends javax.swing.JPanel { private final static String[] strings = {"Apple", "Banana", "Cantaloupe", "Cherry", "Grape", "Lemon", "Mango", "Melon", "Orange", "Peach", "Pear", "Pineapple", "Plum", "Strawberry"}; /** Creates new form. */ public TabbedPaneTest() { initComponents(); tabbedPane1.setTabLayoutPolicy(JTabbedPane.WRAP_TAB_LAYOUT); for (String s : strings) { JPanel p = new JPanel(); tabbedPane1.add(p, s); } // Try to get a better layout with J2SE6 try { int BASELINE_LEADING = GridBagConstraints.class.getDeclaredField("BASELINE_LEADING").getInt(null); GridBagLayout layout = (GridBagLayout) getLayout(); for (Component c : getComponents()) { GridBagConstraints gbc = layout.getConstraints(c); if (gbc.anchor == GridBagConstraints.WEST) { gbc.anchor = BASELINE_LEADING; layout.setConstraints(c, gbc); } } } catch (Exception ex) { // bail } } public static void main(String args[]) { try { UIManager.setLookAndFeel(QuaquaManager.getLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } JFrame f = new JFrame("TabbedPaneTest: " + UIManager.getLookAndFeel().getName()); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.getContentPane().add(new TabbedPaneTest()); f.pack(); f.setVisible(true); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; sizeVariantGroup = new javax.swing.ButtonGroup(); tabLayoutPolicyGroup = new javax.swing.ButtonGroup(); tabPlacementGroup = new javax.swing.ButtonGroup(); tabCountGroup = new javax.swing.ButtonGroup(); tabbedPane1 = new javax.swing.JTabbedPane(); jSeparator1 = new javax.swing.JSeparator(); regularRadio = new javax.swing.JRadioButton(); smallRadio = new javax.swing.JRadioButton(); miniRadio = new javax.swing.JRadioButton(); wrapRadio = new javax.swing.JRadioButton(); scrollRadio = new javax.swing.JRadioButton(); topRadio = new javax.swing.JRadioButton(); rightRadio = new javax.swing.JRadioButton(); bottomRadio = new javax.swing.JRadioButton(); leftRadio = new javax.swing.JRadioButton(); enabledCheck = new javax.swing.JCheckBox(); buttonInTabs = new javax.swing.JCheckBox(); manyTabsRadio = new javax.swing.JRadioButton(); fewTabsRadio = new javax.swing.JRadioButton(); setBorder(javax.swing.BorderFactory.createEmptyBorder(16, 17, 17, 17)); setLayout(new java.awt.GridBagLayout()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; add(tabbedPane1, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(10, 0, 10, 0); add(jSeparator1, gridBagConstraints); sizeVariantGroup.add(regularRadio); regularRadio.setSelected(true); regularRadio.setText("Regular"); regularRadio.setActionCommand("regular"); regularRadio.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { sizeVariantChanged(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; add(regularRadio, gridBagConstraints); sizeVariantGroup.add(smallRadio); smallRadio.setText("Small"); smallRadio.setActionCommand("small"); smallRadio.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { sizeVariantChanged(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; add(smallRadio, gridBagConstraints); sizeVariantGroup.add(miniRadio); miniRadio.setText("Mini"); miniRadio.setActionCommand("mini"); miniRadio.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { sizeVariantChanged(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; add(miniRadio, gridBagConstraints); tabLayoutPolicyGroup.add(wrapRadio); wrapRadio.setSelected(true); wrapRadio.setText("Wrap"); wrapRadio.setActionCommand("wrap"); wrapRadio.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { tabLayoutPolicyChanged(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 20, 0, 0); add(wrapRadio, gridBagConstraints); tabLayoutPolicyGroup.add(scrollRadio); scrollRadio.setText("Scroll"); scrollRadio.setActionCommand("scroll"); scrollRadio.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { tabLayoutPolicyChanged(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 20, 0, 0); add(scrollRadio, gridBagConstraints); tabPlacementGroup.add(topRadio); topRadio.setSelected(true); topRadio.setText("Top"); topRadio.setActionCommand("top"); topRadio.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { tabPlacementChanged(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 20, 0, 0); add(topRadio, gridBagConstraints); tabPlacementGroup.add(rightRadio); rightRadio.setText("Right"); rightRadio.setActionCommand("right"); rightRadio.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { tabPlacementChanged(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 20, 0, 0); add(rightRadio, gridBagConstraints); tabPlacementGroup.add(bottomRadio); bottomRadio.setText("Bottom"); bottomRadio.setActionCommand("bottom"); bottomRadio.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { tabPlacementChanged(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 20, 0, 0); add(bottomRadio, gridBagConstraints); tabPlacementGroup.add(leftRadio); leftRadio.setText("Left"); leftRadio.setActionCommand("left"); leftRadio.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { tabPlacementChanged(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 5; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 20, 0, 0); add(leftRadio, gridBagConstraints); enabledCheck.setSelected(true); enabledCheck.setText("Enabled"); enabledCheck.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { enabledChanged(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 20, 0, 0); add(enabledCheck, gridBagConstraints); buttonInTabs.setText("Button in Tabs"); buttonInTabs.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { buttonInTabsChanged(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 3; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 20, 0, 0); add(buttonInTabs, gridBagConstraints); tabCountGroup.add(manyTabsRadio); manyTabsRadio.setSelected(true); manyTabsRadio.setText("Many Tabs"); manyTabsRadio.setActionCommand("14"); manyTabsRadio.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { tabCountChanged(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 4; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; add(manyTabsRadio, gridBagConstraints); tabCountGroup.add(fewTabsRadio); fewTabsRadio.setText("Few Tabs"); fewTabsRadio.setActionCommand("4"); fewTabsRadio.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { tabCountChanged(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 4; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; add(fewTabsRadio, gridBagConstraints); }// </editor-fold>//GEN-END:initComponents private void sizeVariantChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_sizeVariantChanged String cmd = sizeVariantGroup.getSelection().getActionCommand(); tabbedPane1.putClientProperty("JComponent.sizeVariant", cmd); // tabbedPane1.setUI(tabbedPane1.getUI()); // force ui update }//GEN-LAST:event_sizeVariantChanged private void enabledChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_enabledChanged tabbedPane1.setEnabled(enabledCheck.isSelected()); }//GEN-LAST:event_enabledChanged private void tabLayoutPolicyChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_tabLayoutPolicyChanged String cmd = tabLayoutPolicyGroup.getSelection().getActionCommand(); tabbedPane1.setTabLayoutPolicy("wrap".equals(cmd) ? JTabbedPane.WRAP_TAB_LAYOUT : JTabbedPane.SCROLL_TAB_LAYOUT); }//GEN-LAST:event_tabLayoutPolicyChanged private void tabPlacementChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_tabPlacementChanged String cmd = tabPlacementGroup.getSelection().getActionCommand(); int p = JTabbedPane.TOP; if ("top".equals(cmd)) { p = JTabbedPane.TOP; } else if ("right".equals(cmd)) { p = JTabbedPane.RIGHT; } else if ("bottom".equals(cmd)) { p = JTabbedPane.BOTTOM; } else if ("left".equals(cmd)) { p = JTabbedPane.LEFT; } tabbedPane1.setTabPlacement(p); }//GEN-LAST:event_tabPlacementChanged private void buttonInTabsChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_buttonInTabsChanged boolean b = buttonInTabs.isSelected(); if (b) { for (int i=0,n=tabbedPane1.getTabCount();i<n;i++) { JPanel p=new JPanel(new FlowLayout(FlowLayout.LEADING,4,0)); p.setOpaque(false); p.add(new JLabel(tabbedPane1.getTitleAt(i))); JButton btn=new JButton("×"); btn.setMargin(new Insets(-4,0,-2,0)); // btn.setBorder(new EmptyBorder(0,0,0,0)); btn.putClientProperty("JButton.buttonType", "square"); btn.setOpaque(false); p.add(btn); Methods.invokeIfExists(tabbedPane1,"setTabComponentAt",new Class[]{Integer.TYPE,Component.class},new Object[]{i,p}); } } else { for (int i=0,n=tabbedPane1.getTabCount();i<n;i++) { Methods.invokeIfExists(tabbedPane1,"setTabComponentAt",new Class[]{Integer.TYPE,Component.class},new Object[]{i,null}); } } }//GEN-LAST:event_buttonInTabsChanged private void tabCountChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_tabCountChanged String cmd = tabCountGroup.getSelection().getActionCommand(); int newCount=Integer.valueOf(cmd); tabbedPane1.removeAll(); for (int i=0;i<newCount;i++) { JPanel p = new JPanel(); tabbedPane1.add(p, strings[i]); } }//GEN-LAST:event_tabCountChanged // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JRadioButton bottomRadio; private javax.swing.JCheckBox buttonInTabs; private javax.swing.JCheckBox enabledCheck; private javax.swing.JRadioButton fewTabsRadio; private javax.swing.JSeparator jSeparator1; private javax.swing.JRadioButton leftRadio; private javax.swing.JRadioButton manyTabsRadio; private javax.swing.JRadioButton miniRadio; private javax.swing.JRadioButton regularRadio; private javax.swing.JRadioButton rightRadio; private javax.swing.JRadioButton scrollRadio; private javax.swing.ButtonGroup sizeVariantGroup; private javax.swing.JRadioButton smallRadio; private javax.swing.ButtonGroup tabCountGroup; private javax.swing.ButtonGroup tabLayoutPolicyGroup; private javax.swing.ButtonGroup tabPlacementGroup; private javax.swing.JTabbedPane tabbedPane1; private javax.swing.JRadioButton topRadio; private javax.swing.JRadioButton wrapRadio; // End of variables declaration//GEN-END:variables }