Save This Page
Home » openjdk-7 » net.jbeans.bean.property » editor » [javadoc | source]
    1   /* -------------------------------------------------------------------
    2    * Java source file for the class BorderChooser
    3    * 
    4    * Copyright (c), 2002, Masahiro Takatsuka.
    5    * All Rights Researved.
    6    * 
    7    * Original Author: Masahiro Takatsuka (masa@jbeans.net)
    8    * $Author: takatsukam $
    9    * 
   10    * $Date: 2003/07/25 04:51:44 $
   11    * 
   12    * $Id: BorderChooser.java,v 1.1.1.1 2003/07/25 04:51:44 takatsukam Exp $
   13    * 
   14    * Reference:		Document no:
   15    * ___				___
   16    * 
   17    * To Do:
   18    * ___
   19    * 
   20   ------------------------------------------------------------------- */
   21   
   22   /* --------------------------- Package ---------------------------- */
   23   package net.jbeans.bean.property.editor;
   24   
   25   /* ------------------ Import classes (packages) ------------------- */
   26   import java.awt;
   27   import java.awt.event;
   28   import java.util;
   29   import javax.swing;
   30   import javax.swing.border;
   31   
   32   /*====================================================================
   33                   Implementation of class BorderChooser                 
   34   ====================================================================*/
   35   /**
   36    * generally describe BorderChooser in here
   37    * 
   38    * @version $Revision: 1.1.1.1 $
   39    * @author Masahiro Takatsuka (masa@jbeans.net)
   40    * @see JTabbedPane
   41    */
   42   
   43   final class BorderChooser extends JTabbedPane {
   44   	private Border border = null;
   45   	private static Color sColor = null;
   46   	private static JPanel sPrevious = null;
   47   	/* this guy is special..title needs to be set */
   48   	private Vector titledBordersList = null; 
   49   	private JPanel titledBorders = null;
   50   	
   51       BorderChooser() {
   52           Border blackline, etched, raisedbevel, loweredbevel, empty;
   53   		
   54           //A border that puts 10 extra pixels at the sides and
   55           //bottom of each pane.
   56           Border paneEdge = BorderFactory.createEmptyBorder(0,10,10,10);
   57   		
   58   		blackline = BorderFactory.createLineBorder(Color.black);
   59   		etched = BorderFactory.createEtchedBorder();
   60           raisedbevel = BorderFactory.createRaisedBevelBorder();
   61           loweredbevel = BorderFactory.createLoweredBevelBorder();
   62           empty = BorderFactory.createEmptyBorder();
   63   		
   64           /* ------------------ First pane: simple borders ------------------ */
   65           JPanel simpleBorders = new JPanel();
   66           simpleBorders.setBorder(paneEdge);
   67           simpleBorders.setLayout(new BoxLayout(simpleBorders,
   68                                                 BoxLayout.Y_AXIS));
   69   
   70           addCompForBorder(empty, "Empty",
   71                            simpleBorders);
   72           addCompForBorder(blackline, "Line",
   73                            simpleBorders);
   74           addCompForBorder(etched, "Etched",
   75                            simpleBorders);
   76           addCompForBorder(raisedbevel, "Raised Bevel",
   77                            simpleBorders);
   78           addCompForBorder(loweredbevel, "Lowered Bevel",
   79                            simpleBorders);
   80   		
   81           /* ------------------ Second pane: matte borders ------------------ */
   82           JPanel matteBorders = new JPanel();
   83           matteBorders.setBorder(paneEdge);
   84           matteBorders.setLayout(new BoxLayout(matteBorders,
   85   											 BoxLayout.Y_AXIS));
   86   		
   87           //XXX: We *should* size the component so that the icons tile OK.
   88           //XXX: Without that, the icons are likely to be cut off and look bad.
   89           ImageIcon icon = new ImageIcon("images/left.gif"); //20x22
   90           Border border = BorderFactory.createMatteBorder(-1, -1, -1, -1, icon);
   91           addCompForBorder(border,
   92                            "matte border (-1,-1,-1,-1,icon)",
   93                            matteBorders);
   94           border = BorderFactory.createMatteBorder(1, 5, 1, 1, Color.red);
   95           addCompForBorder(border,
   96                            "matte border (1,5,1,1,Color.red)",
   97                            matteBorders);
   98           border = BorderFactory.createMatteBorder(0, 20, 0, 0, icon);
   99           addCompForBorder(border,
  100                            "matte border (0,20,0,0,icon)",
  101                            matteBorders);
  102   		
  103           /* ------------------ Third pane: titled borders ------------------ */
  104           this.titledBorders = new JPanel();
  105   		this.titledBordersList = new Vector();
  106           this.titledBorders.setBorder(paneEdge);
  107           this.titledBorders.setLayout(new BoxLayout(this.titledBorders,
  108                                                 BoxLayout.Y_AXIS));
  109           this.titledBorders.add(Box.createRigidArea(new Dimension(0, 10)));
  110   		JPanel titleFieldPanel = new JPanel();
  111   		titleFieldPanel.add(new JLabel("Title : "));
  112   		JTextField titlefield = new JTextField(20);
  113   		titlefield.addActionListener(new ActionListener() {
  114   				public final void actionPerformed(ActionEvent evt) {
  115   					String title = ((JTextField) evt.getSource()).getText();
  116   					int count = BorderChooser.this.titledBordersList.size();
  117   					for (int i = 0; i < count; i++) {
  118   						Object comp = BorderChooser.this.titledBordersList.get(i);
  119   						if (comp instanceof TitledBorder) {
  120   							((TitledBorder) comp).setTitle(title);
  121   						}
  122   					}
  123   					BorderChooser.this.titledBorders.repaint();
  124   				}
  125   			});
  126   		titleFieldPanel.add(titlefield);
  127           this.titledBorders.add(titleFieldPanel);
  128           TitledBorder titled;
  129   		
  130           titled = BorderFactory.createTitledBorder("title");
  131   		this.titledBordersList.add(titled);
  132           addCompForBorder(titled,
  133                            "default titled border"
  134                            + " (default just., default pos.)",
  135                            this.titledBorders);
  136   
  137           titled = BorderFactory.createTitledBorder(blackline, "title");
  138   		this.titledBordersList.add(titled);
  139           addCompForTitledBorder(titled,
  140                                  "titled line border"
  141   							   + " (centered, default pos.)",
  142                                  TitledBorder.CENTER,
  143                                  TitledBorder.DEFAULT_POSITION,
  144                                  this.titledBorders);
  145   
  146           titled = BorderFactory.createTitledBorder(etched, "title");
  147   		this.titledBordersList.add(titled);
  148           addCompForTitledBorder(titled,
  149                                  "titled etched border"
  150   							   + " (right just., default pos.)",
  151                                  TitledBorder.RIGHT,
  152                                  TitledBorder.DEFAULT_POSITION,
  153                                  this.titledBorders);
  154   
  155           titled = BorderFactory.createTitledBorder(loweredbevel, "title");
  156   		this.titledBordersList.add(titled);
  157           addCompForTitledBorder(titled,
  158                                  "titled lowered bevel border"
  159   							   + " (default just., above top)",
  160                                  TitledBorder.DEFAULT_JUSTIFICATION,
  161                                  TitledBorder.ABOVE_TOP,
  162                                  this.titledBorders);
  163   
  164           titled = BorderFactory.createTitledBorder(empty, "title");
  165   		this.titledBordersList.add(titled);
  166           addCompForTitledBorder(titled, "titled empty border"
  167                                  + " (default just., bottom)",
  168                                  TitledBorder.DEFAULT_JUSTIFICATION,
  169                                  TitledBorder.BOTTOM,
  170                                  this.titledBorders);
  171   
  172           /* ---------------- Fourth pane: compound borders ----------------- */
  173           JPanel compoundBorders = new JPanel();
  174           compoundBorders.setBorder(paneEdge);
  175           compoundBorders.setLayout(new BoxLayout(compoundBorders,
  176   												BoxLayout.Y_AXIS));
  177           Border redline = BorderFactory.createLineBorder(Color.red);
  178   
  179           Border compound;
  180           compound = BorderFactory.createCompoundBorder(
  181   													  raisedbevel, loweredbevel);
  182           addCompForBorder(compound, "compound border (two bevels)",
  183                            compoundBorders);
  184   
  185           compound = BorderFactory.createCompoundBorder(
  186   													  redline, compound);
  187           addCompForBorder(compound, "compound border (add a red outline)",
  188                            compoundBorders);
  189   
  190           titled = BorderFactory.createTitledBorder(
  191   												  compound, "title",
  192   												  TitledBorder.CENTER,
  193   												  TitledBorder.BELOW_BOTTOM);
  194           addCompForBorder(titled, 
  195                            "titled compound border"
  196                            + " (centered, below bottom)",
  197                            compoundBorders);
  198   
  199           addTab("Simple", null, simpleBorders, null);
  200   //          addTab("Matte", null, matteBorders, null);
  201           addTab("Titled", null, this.titledBorders, null);
  202           addTab("Compound", null, compoundBorders, null);
  203           setSelectedIndex(0);
  204       }
  205   
  206       void addCompForTitledBorder(TitledBorder border,
  207                                   String description,
  208                                   int justification,
  209                                   int position,
  210                                   Container container) {
  211           border.setTitleJustification(justification);
  212           border.setTitlePosition(position);
  213           addCompForBorder(border, description,
  214                            container);
  215       }
  216   
  217       void addCompForBorder(Border border,
  218                             String description,
  219                             Container container) {
  220           JPanel comp = new JPanel(false);
  221   		JLabel label = new JLabel(description, JLabel.CENTER);
  222   		label.setPreferredSize(new Dimension(180,20));
  223   		label.setMaximumSize(new Dimension(180,20));
  224   		label.setMinimumSize(new Dimension(180,20));
  225   		//	label.setToolTipText("mouse click selects Border - double click for more...");
  226   		comp.setLayout(new GridLayout(1, 1));
  227   		comp.add(label);
  228           comp.setBorder(border);
  229   		comp.addMouseListener(new ActiveBorderListener(border,comp));
  230           container.add(Box.createRigidArea(new Dimension(0, 10))); 
  231           container.add(comp);
  232       }
  233   
  234   	Border getSelectedBorder(){
  235   		return this.border;
  236   	}
  237   
  238   	void setSelectedBorder(Border b, JPanel p){
  239   		if (this.border != b){
  240   			if (sPrevious != null)
  241   				sPrevious.setBackground(sColor);
  242   			sPrevious = p;
  243   			sColor = p.getBackground();
  244   			p.setBackground(UIManager.getColor("Button.select"));
  245   			p.revalidate();
  246   			p.repaint();
  247   		}
  248   		this.border = b;
  249   	}
  250     
  251   
  252   	final class ActiveBorderListener extends MouseAdapter {
  253   		Border b;
  254   		JPanel p;
  255       
  256   		public ActiveBorderListener(Border b, JPanel p){
  257   			super();
  258   			this.b = b;
  259   			this.p = p;
  260   		}
  261   
  262   		public final void mousePressed(MouseEvent e){
  263   			setSelectedBorder(b,p);
  264   			if (e.getClickCount() ==  2){
  265   				// bring up title/color editor
  266   				if (b instanceof TitledBorder){
  267   					TitledBorder t = (TitledBorder)b;
  268   					if (t.getTitle() != null){
  269   						String title = JOptionPane.showInputDialog(p, "Please Enter Title String: ");
  270   						if (title != null){
  271   							t.setTitle(title);
  272   						}
  273   					}
  274   				}
  275   			}
  276   		}
  277   	};    
  278   
  279   
  280   
  281       public final static void main(String[] args) {
  282           JFrame frame = new JFrame("BorderChooser");
  283   		
  284           frame.addWindowListener(new WindowAdapter() {
  285                   public final void windowClosing(WindowEvent e) {
  286                       System.exit(0);
  287                   }
  288               });
  289   		
  290           frame.getContentPane().add("Center", new BorderChooser());
  291           frame.pack();
  292           frame.show();
  293       }
  294   }

Save This Page
Home » openjdk-7 » net.jbeans.bean.property » editor » [javadoc | source]