1 package jimm.datavision.layout.swing; 2 import jimm.datavision.ErrorHandler; 3 import jimm.datavision.field.Field; 4 import jimm.datavision.field.ImageField; 5 import java.awt.Dimension ; 6 import java.awt.CardLayout ; 7 import javax.swing.JPanel ; 8 import java.util.ArrayList ; 9 import java.util.Iterator ; 10 11 13 21 class SwingPageContents { 22 23 ArrayList pageFields; 24 SwingPage page; 25 int pageNumber; 26 JPanel parent; 27 Dimension pageDim; 28 Thread buildThread; 29 30 38 SwingPageContents(JPanel parent, int pageNumber, Dimension dim) { 39 pageFields = new ArrayList (); 40 this.pageNumber = pageNumber; 41 this.parent = parent; 42 pageDim = dim; 43 } 44 45 53 void add(Field f, String v, java.awt.Rectangle r) { 54 pageFields.add(new SwingPageField(f, v, r)); 55 } 56 57 60 boolean isPageBuilt() { return page != null; } 61 62 69 SwingPage getPage() { 70 if (page == null) { 71 if (buildThread != null) { try { 73 if (buildThread != null) { 75 synchronized(buildThread) { 76 buildThread.join(); 77 } 78 } 79 } 80 catch (InterruptedException e) { 81 ErrorHandler.error(e); 82 } 84 } 85 else 86 buildPage(); 87 } 88 return page; 89 } 90 91 94 void showPage() { 95 getPage(); CardLayout cardLayout = (CardLayout )parent.getLayout(); 97 cardLayout.show(parent, "page " + pageNumber); 98 } 99 100 106 void prebuildPage() { 107 if (page != null || buildThread != null) 108 return; 109 110 buildThread = new Thread (new Runnable () { 111 public void run() { 112 buildPage(); 113 buildThread = null; 114 } 115 }); 116 buildThread.start(); 117 } 118 119 122 void buildPage() { 123 SwingPage newPage = new SwingPage(); 124 newPage.setPreferredSize(pageDim); 125 126 for (Iterator iter = pageFields.iterator(); iter.hasNext();) { 127 SwingPageField spf = (SwingPageField)iter.next(); 128 129 SwingField sf; 131 if (spf.field instanceof ImageField) 132 sf = new SwingImageField((ImageField)spf.field); 133 else 134 sf = new SwingTextField(spf.field, spf.value); 135 136 sf.getComponent().setBounds(spf.rect); 137 newPage.add(sf.getComponent()); 138 } 139 140 parent.add(newPage, "page " + pageNumber); 142 143 page = newPage; 144 } 145 146 150 void forgetPage() { 151 if (!isPageBuilt()) 152 return; 153 154 CardLayout cardLayout = (CardLayout )parent.getLayout(); 155 cardLayout.removeLayoutComponent(page); 156 parent.remove(page); 157 158 page = null; 159 } 160 } 161 162 171 class SwingPageField { 172 173 Field field; 174 String value; 175 java.awt.Rectangle rect; 176 177 185 SwingPageField(Field f, String v, java.awt.Rectangle r) { 186 field = f; 187 value = v; 188 rect = r; 189 } 190 } 191 | Popular Tags |