home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 July / Chip_1998-07_cd.bin / zkuste / JBuilder / JBuild / jbuilder / jruntime.z / HintsAndTips.txt < prev    next >
Text File  |  1997-08-25  |  53KB  |  1,100 lines

  1.  
  2. ----------------------------------------------------------------
  3.  
  4.                         HintsAndTips.txt
  5.         
  6.              Late-breaking news, workarounds and useful tips
  7.                    
  8. ----------------------------------------------------------------
  9.  
  10. To jump to a specific section, search for "SECTION #", replacing
  11. # with the appropriate section number.
  12.  
  13. -----------------
  14. TABLE OF CONTENTS
  15. -----------------
  16. SECTION 1. Helpful Tips and Workarounds
  17. A. General
  18. B. Install
  19. C. JDK
  20. D. AppBrowser
  21. E. Compiler
  22. F. Debugger
  23. G. Visual Design Tools and JavaBeans
  24. H. The jbInit Method
  25. I. Using Relative Paths in JBuilder
  26. J. Database
  27. K. Database - Resolving
  28. L. Working with Columns
  29. M. Help System
  30. N. Wizards
  31. O. KL Group components
  32. P. Using ObjectStore PSE with JBuilder
  33. Q. Deploying Applications and Applets
  34.  
  35. SECTION 2: International Issues
  36. A. Install
  37. B. Compiler
  38. C. Visual Design Tools
  39. D. Database
  40.  
  41. -----------------------------------------
  42. SECTION 1. Helpful Tips and Workarounds
  43. -----------------------------------------
  44. A. General
  45. ----------
  46. For the latest information on JBuilder, please see the JBuilder
  47. page at http://www.borland.com.
  48.  
  49. B. Install
  50. ----------
  51. Be sure to uninstall any previous version of JBuilder.  Manually 
  52. delete the bin directory that will probably remain after 
  53. you uninstall JBuilder .Delete the jbuilder.ini file.
  54.  
  55. According to Windows conventions, JBuilder automatically updates 
  56. your registry to add a file association for .java and .jpr files.  
  57. This means JBuilder launches automatically when you double click 
  58. one of these files in your Explorer.
  59.  
  60. If you wish to use your own editor to browse .java or .jpr files from 
  61. the Explorer, follow these steps:
  62.   1) Open your Explorer.
  63.   2) Choose the View | Options menu item.
  64.   3) Select the File Types tab.
  65.   4) Scroll down and select the "Java File" file type.
  66.   5) Click the Edit button.
  67.   6) Click the New button.
  68.   7) For the Action, specify Edit.
  69.   8) To specify the application to run, click the Browse button and select your favorite editor.
  70.   9) Click OK three times.
  71.  
  72. You have just added an Edit command to your right-click menu in the Explorer 
  73. for this particular file type.  Selecting this command invokes your editor.  
  74. Double-clicking still launches JBuilder.
  75.  
  76. C. JDK
  77. ------
  78. This release of Borland JBuilder is based on the Version 1.1.2_Borland 
  79. of Sun's Java Development Kit. This version of the Java Development Kit
  80. contains JDK 1.1.2 functionality plus 1.1.3 AWT features, plus some 
  81. Borland-found bug fixes needed for JBuilder to run correctly at development time.
  82. The target applications should be able to run on JDK 1.1.3 or later in all cases.
  83. Also, if you restrict yourself to the features of earlier versions, your classes 
  84. should run without problems on earlier versions of the JDK, such as 1.02.
  85.  
  86. Do not use any other JDK 1.1 release with JBuilder itself -- use only
  87. the JDK 1.1 included with JBuilder.  You can deploy your target 
  88. applications with any JDK version 1.1.3 or higher, however.
  89.  
  90. D. AppBrowser
  91. -------------
  92. If you remove a file from a project and then, in the same session,
  93. try to create a class with the same name as the removed file, an 
  94. erroneous dialog box appears reporting that the file already exists.  
  95. Your new file will be created correctly.  (5233)
  96.  
  97. JBuilder can hang when it encounters files with paths that contain a "#"
  98. character.  The workaround is to remove the "#" character from the
  99. directory name.  (6458)
  100.  
  101. E. Compiler
  102. -----------
  103. If you compile a project and get an error that a class file is not
  104. found, this is the problem: If that class is referenced in the code, it 
  105. must exist whether or not compilation of it is necessary. In other words,
  106. class loading on demand is not implemented in the compiler. The 
  107. workaround is to obtain those missing classes from the vendor. Alternatively,
  108. if the class is referred to, but never really used (for example if there is an 
  109. unnecessary import statement), you could create a dummy class with the 
  110. same package and name as the compiler complains about and place it in 
  111. the classpath. (6887)
  112.  
  113. For certain source code, such as an empty try and non-empty catch, 
  114. the compiler generates correct but dead code. The JIT detects the dead code 
  115. and gives the warning "JIT compiler: Bytecode does not conform to the 
  116. specification."  The code runs correctly, however. (5789)
  117.  
  118. The compiler does not report an error when an inner class name is the same 
  119. as its enclosing class. It should. (7763)
  120.  
  121. JBuilder has problems if you put the root directory of a drive (e.g. c:\;...)
  122. in the source or class paths. Make sure that all nodes in these paths are 
  123. either at least one directory down from the root, or are explicit archive 
  124. filenames. (5893)
  125.  
  126. F. Debugger
  127. -----------
  128. Changes to an .html file, such as changes to an applet tag, are not 
  129. acknowledged by the Debugger until the .html file is saved. (6711)
  130.  
  131. For a class displayed in the list of non-traceable classes, after the 
  132. class is loaded, the invalid breakpoint glyph should be displayed,
  133. but is not. Instead, the unverified breakpoint glyph is displayed.
  134. (6670)
  135.  
  136. Breakpoint line glyphs are not displaying correctly while debugging.
  137. The workaround is to force the window to repaint. (6628)
  138.  
  139. The error message "Unable to debug class" appears when you are 
  140. debugging an applet and these conditions are true: 
  141. 1. The project file is selected.
  142. 2.  The .java file doesn't have a main.
  143. 3.  The project property "Default Runnable File" is blank.
  144. 4.  One or more .html files exist in the project file before the .html  
  145.        file that has the valid APPLET CODE tag. 
  146. The workaround is to change one of these four things, or right click 
  147. on the desired .html file in the Navigation pane and choose 
  148. Debug. (7353)
  149.  
  150. Conditional breakpoints take approximately one second per conditional 
  151. evaluation cycle. If the condition is evaluated many times, the debugger 
  152. may appear to be hung when it isnÆt. You can use the Pause or Stop buttons 
  153. if necessary. (7784)
  154.  
  155. If you have .class files in a .zip or .jar file, you must set the Debugger
  156. option Compile before Debug to Yes. (4331)
  157.  
  158. If your application throws an exception very early in operation before the 
  159. Debugger sees the thread, JBuilder can hang. If you suspect this, try to 
  160. suppress portions of the application's startup code that may be throwing an 
  161. exception to find where it is happening, and then handle or prevent the 
  162. exception. (7825)
  163.  
  164. G. Visual Design Tools and JavaBeans
  165. ------------------------------------
  166. You can quickly get to the online reference documentation for a component in the 
  167. Inspector by clicking on a property in the Inspector and then pressing F1.
  168.  
  169. The Designer only designs Beans, which must be public. If you have a class 
  170. which is not public, the Designer will report a parse error. The workaround 
  171. is to make your class public.
  172.  
  173. The purpose of the UI Designer is to design visual Beans (subclasses of 
  174. java.awt.Component) placed into Beans that are subclasses of
  175. java.awt.Container. Beans that don't meet these requirements will not
  176. appear in the UI Designer. Instead, they appear only in the 
  177. Component Tree under the Other node. (7678)
  178.  
  179. The following functionality of JavaBeans is not supported in this release
  180. of JBuilder:
  181. 1.  Setting internally indexed properties using the Inspector. (Those
  182.      that have the form "void setProperty(int, T)").
  183. 2.  The invoking of Customizers.
  184. 3.  The creation of code for Applet and deserialized Bean use. Note that you
  185.      can make this code change by hand.
  186.  
  187. If you don't see what you expect in the Designer after dropping a 
  188. control or setting a property, you can try refreshing the Designer 
  189. by double-clicking the node labeled "this" in the Component Tree pane, 
  190. or using the right-click Activate Designer menu item. If this doesnÆt
  191. work, try touching the source code and then returning to the
  192. Designer. (7438)
  193.  
  194. You cannot add a Bean to the Component Palette if it has the same name as 
  195. another Bean already on the palette. The workaround is to rename
  196. the Bean. (7607)
  197.  
  198. If you have a Bean in one file, which is referenced in another file 
  199. and is currently being viewed in the Designer, changes made to the first 
  200. Bean are not be reflected in the other Designer until you exit and restart 
  201. JBuilder. The reason is the first time you use the Bean in the Designer, 
  202. it is loaded by the VM and referenced by the Designer. Even though you 
  203. change the Bean and recompile, the class is already loaded and is
  204. not replaced. This is true for any Bean which is being designed 
  205. and used in the same session. (7679)
  206.  
  207. The DecoratedFrame class will automatically close the application 
  208. when the user clicks the X close button. If you have a 
  209. multi-window application and don't want this behavior, simply set 
  210. the exitOnClose property of your class that extends 
  211. DecoratedFrame to false. In this case, if you want to do
  212. more than just System.exit() on this button, you must 
  213. handle your own processing of this window close event. See the
  214. TextEdit tutorial sample file for an example of how to add a 
  215. window close event handler. (7583)
  216.  
  217. Double-clicking on a designer folder in the Component Tree
  218. does not bring up that designer. For example, even if you 
  219. have a menu in the frame you are designing, double-clicking on 
  220. the Menu folder causes the Content pane to merely go blank. 
  221. To bring up the Menu Designer, you must double-click on the next 
  222. level object down in the Component Tree, such as MenuBar. (6954)
  223.  
  224. If you want to set a ListControl's navigateWithDataSet property to
  225. false, you must first attach the dataSet to the component. (7146)
  226.  
  227. If you want to drop a visual component on a class that extends a 
  228. class with a jbInit() method, you must move the instantiation of 
  229. that visual component into the jbInit() method in the source 
  230. code. (6596)
  231.  
  232. If you have set a font property of a menu item and then add a
  233. sub-menu to that menu item, the setting of the font property is
  234.  lost. The workaround is to reset the font property for that menu
  235. item. (5787)
  236.  
  237. Setting the background color property of a column object in the 
  238. Inspector also sets the foreground color to the same value in the 
  239. Inspector. Changing the foreground color does not reflect your changes in 
  240. the Inspector, although the correct code is generated. (7214)
  241.  
  242. Setting a TextFieldControl's setReadOnly property to true after
  243. setting the TextFieldControl's setText property, causes
  244. the text not to be displayed in the UI Designer. The workaround
  245. is to set the setReadOnly property to true before setting the
  246. setText property. (7321)
  247.  
  248. You will get an exception if you set the buttonType of a ButtonBar 
  249. to the existing type, including setting it to the default value
  250. (TextAndImage) if it wasn't explicitly set. The workaround is to not
  251. set the default explicitly. You can also test the existing value first and 
  252. elect not to set it. (7550)
  253.  
  254. buttonBar.setButtonEnabled(int, boolean) throws an IllegalArgumentException 
  255. if the buttonBar has not been shown at least once. The workaround is to 
  256. call setButtonEnabled only after the buttonBar has been shown. (7745)
  257.  
  258. If you add a frame to your project that extends a frame currently in your
  259. project and the frame which you are extending contains AWT components and
  260. your new frame does not, you must add the following line of code to
  261. your new frame in order to compile:
  262. import java.awt.*; (7831)
  263.  
  264. When designing an application that has multiple menus in multiple frames, 
  265. a bug occurs when you edit more than one of these menus through the Menu 
  266. Designer during a single session. If you need to design multiple menus 
  267. like this, it is best to close the project and reopen it before designing 
  268. the second menu. (7780)
  269.  
  270. Calling getSelectedLabel from a CheckboxPanel when none of the checkboxes 
  271. are checked causes a NullPointerException. The workaround is to wrap 
  272. try/catch around the call to catch the NullPointerExecption. Usually one of the radio 
  273. buttons is initially checked, which is what you want. (7734)
  274.  
  275. A ChoiceControl by default displays the first value in the string
  276. array that was used in the ChoiceControl's setItems method, but the
  277. ChoiceControl's model will be null. Set the ChoiceControl's model
  278. explicitly to have the ChoiceControl display its actual setting. (7656)
  279.  
  280. The tab order of components in a frame or panel is determined by the
  281. order of the add() method calls in jbInit. This is initially determined
  282. by the order in which you drop controls into your design. To
  283. subsequently change the tab order, manually change the order of the
  284. add() calls in your source code. (7650)
  285.  
  286. The setSelectedIndex property of a checkboxPanel requires a group, therefore
  287. its properties must be set in the following order: 
  288. 1.  The labels property.
  289. 2.  The grouped property.
  290. 3.  The setSelectedIndex property. (7889)
  291.  
  292. Dropping controls to a layout in the Component Tree does not work correctly.
  293. The workaround is to select the layout in the Component Tree and drop the
  294. control onto the frame or panel. (7882)
  295.  
  296.  
  297. H. The jbInit Method
  298. --------------------
  299. The contents of the jbInit method are arranged as follows:
  300.  
  301. 1. Subcomponent initial property settings in order by subcomponent and
  302. then by property. (Properties are ordered as defined by the BeanInfo class, 
  303. or as the getter methods are found through reflection). Event listener
  304. addXxxListener calls are also placed here, ordered as if they were
  305. property settings.
  306.  
  307. 2. Additional method calls for wiring subcomponent relationships
  308. created by the designers. These include container.add(component, constraints)
  309. calls as well as menu and data module assembly. Generally these are ordered by
  310. subcomponent, and then child (Z) order.
  311.  
  312. Any hand rearranging of the above methods will likely be undone the next
  313. time a designer manipulates something nearby. The changes won't hurt
  314. anything, but you can't rely on them remaining.
  315.  
  316. Additional hand-coded method calls or other statements can be placed
  317. anywhere within jbInit, but it is recommended that they be placed at the
  318. end. They may get moved by the designers, but this is much less likely
  319. to happen if they are at the bottom.
  320.  
  321. I. Using Relative Paths in JBuilder
  322. -----------------------------------
  323. Using the iconImageName as opposed to the iconImageURL:
  324. We recommend using the "xxxName" as a general resource identifier. 
  325. The "xxxUrl" properties may become deprecated in the future.
  326.  
  327. When running or debugging your application, the "current directory"
  328. is the project directory.
  329.  
  330. Images and other 'resources' should be loaded in the following sequence:
  331. 1. Loaded as a resource. System uses classpath entries + name.
  332. 2. Loaded as a URL.
  333. 3. Loaded as a path (relative to current working directory or an absolute path)
  334.  
  335. J. Database
  336. -----------
  337. Be sure to explicitly call the closeConnection() method of on your Database
  338. objects when you are through with them or you will leave orphaned JDBC
  339. connections on your server.
  340.  
  341. The default value of the resolvable property for a calculated column is true, which
  342. causes an error when saving changes because you cannot resolve to 
  343. a calculated column. The workaround is to set the resolvable property of the
  344. calculated column to false. (7869)
  345.  
  346. Changing the getter for a DataSet in a DataModule and recompiling
  347. the DataModule source is not reflected in the Visual Design Tools
  348. when you switch back to a frame that has a reference to the 
  349. DataModule. The workaround is to close and reopen the project to
  350. refresh the Visual Design Tools to show the current DataModule 
  351. state. (4980)
  352.  
  353. A partial locate on a column sorted in descending sequence finds 
  354. only exact matches. (2397)
  355.  
  356. You may get deprecation warnings when compiling applications using 
  357. DataSet. (7083)
  358.  
  359.  
  360. Creating a DataModule class, and placing a queryDataSet in the subclass
  361. may generate code that accesses uninitialized variables in a 
  362. derived class. For example:
  363.  
  364. QueryDataSet queryDataSet1 = new QueryDataSet();
  365. jbInit() 
  366. {
  367.     super.jbInit();
  368.     queryDataSet.setQuery(...)
  369. }
  370.  
  371. When the subClass1 is instantiated, the sequence of execution is:
  372. 1. The constructor of subclass
  373. 2. Which calls the constructor of the superclass
  374. 3. Which initializes all the superclass variables
  375. 4. And then calls the jbInit() of the subclass
  376. 5. Which calls jbInit() of the superclass
  377. 6. And then calls queryDataSet's setQuery (which is not initialized)
  378.  
  379. Since Java allows such a calling sequence, the queryDataSet1 variable 
  380. of the subclass is never initialized and is always null. (6429)
  381.  
  382.  
  383. When a column's edit mask is removed through the Visual Design Tools, 
  384. the call to setEditMask is not removed. The workaround is to remove
  385. that line of code from the source. (6584)
  386.  
  387. When you use the Class wizard to make a new class which implements a 
  388. DataModule, a static getDataModule method is not created. The workaround
  389. is to use the File|New...DataModule, or code that method by hand. (6897)
  390.  
  391. To append a new pseudo-record to a DataSet when positioned on the bottom 
  392. row of a grid control, press Ctrl-Down. (7002)
  393.  
  394. If you want to set the ListControl property navigateWithDataSet to false,
  395. you must set the dataSet property of the ListControl first. (7146)
  396.  
  397. The AccessEvent handler in GridControl does not properly handle two 
  398. dataset.close() requests in succession. The workaround is to not add 
  399. the extra close. (7289)
  400.  
  401. If you link a DataSet to itself in a Master-Detail relationship, some editing
  402. operations fail. You can still use this type of link for read-only 
  403. operations. Use a TableDataSet or QueryDataSet for the master, and a 
  404. DataSetView for the detail, so they can navigate separately.
  405.  
  406. DataSet.rowCount() doesn't change after a DataSet is emptied (using 
  407. StorageDataSet.empty()), and a grid displaying the data isn't notified 
  408. of the change. The workaround is to force the updates by closing and 
  409. reopening the DataSet. (6841)
  410.  
  411. There is currently a bug in the JavaSoft SimpleDateFormat class (in JDK 1.1.2) 
  412. involving Timestamp values. The default displayMask for Timestamp in the 
  413. English Locale is "MM/dd/yy hh:mm:ss a". When a Timestamp value containing all 
  414. zeroes in the "mm:ss" part of the pattern is parsed (such as 02/26/97 12:00:00 am), 
  415. a spurious NullPointerException is occasionally thrown. (5532)
  416.  
  417. Use FieldControl rather than TextControl when binding separate field objects to a DataSet.
  418. This component is data-aware and inherits all the appropriate properties from its associated 
  419. Column object. The TextFieldControl object, on the other hand, is a very thin wrapper on 
  420. top of the AWT TextField component and is not aware of issues like Locale-specific 
  421. formatting. Consequently, the TextFieldControl is not recommended for use with DataSet 
  422. Columns. (5532)
  423.  
  424. The FieldControl has a new property called postOnFocus, which provides the same 
  425. functionality as that of the TextFieldControl. If this property is set to true (the default), 
  426. when the FieldControl component loses focus to some other component in the current 
  427. window, an endEdit occurs that posts the value, for example, to the DataSet. If this 
  428. property is set to false, you must press the Enter key first to post values to DataSet.
  429.  
  430. When you're defining a Master-Detail link between TableDataSets in the Designer, 
  431. column names are not displayed in the MasterLink editor. The workaround is to add 
  432. the code to set the MasterDetailLink manually. (7599)
  433.  
  434. BLOB images are not displaying consistently in a gridControl. The workaround
  435. is to use fieldControls to display BLOB images. (7772)
  436.  
  437. If you use an edit mask, values for LONGs that are greater than the maximum INT are 
  438. truncated to INTs when you enter edit mode. Once in the edit mask, you can enter 
  439. any LONG value, and it is retained when you end the edit. There's no truncation if you 
  440. have only a display mask or no mask at all. (7548)
  441.  
  442. The layout property of a buttonBar cannot be changed. If you try to change it in the
  443. Inspector you will find that you cannot move off of that property temporarily. The
  444. workaround is to select a different component and then reselect the buttonBar
  445. component. (7542)
  446.  
  447. The preferred way to manage JDBC Connections is to use the Connection property of the 
  448. Database component. If you have a specific need which is not met using this approach, 
  449. there is an alternate constructor for the Database component that  allows you to 
  450. pass in your own JDBC Connection. Note that once you give a JDBC Connection to the 
  451. Database object, the Database is free to close that Connection when necessary.
  452. This constructor is really reserved only for those situations where no other approach 
  453. works. It is likely to become deprecated (that is, removed) in future releases. It will 
  454. be replaced by more powerful Connection property binding methods. (7138)
  455.  
  456. When a Master table is linked to itself, selecting the Delay Fetch option in the 
  457. masterLink Descriptor UI followed by pressing TestLink causes a stack overflow. (7848)
  458.  
  459. Assigning a non-default Locale to a DataSet does not reconfigure the formatter for each 
  460. Column. The workaround is to call setLocale() for each column to force initColumn 
  461. to rebuild the formatter. (5762)
  462.  
  463. If you get the error message "No suitable driver" when testing the database 
  464. connection in the Inspector, and your URL is specified correctly, it could mean that 
  465. the IDEClassPath doesn't contain any driver class files. The IDEClassPath is used 
  466. by the Designer to locate class files. Modify IDEClassPath in jbuilder.ini to include 
  467. the location of the driver classes.
  468.  
  469. Additional connectivity troubleshooting information is available in online help. 
  470. Look under Troubleshooting JDBC Connections in the Database Application 
  471. Developer's Guide.
  472.  
  473. Providing problem: Query is read-only, even though table on the server has a unique 
  474. row id. When you try to modify the dataset, you get a message that reports: "Cannot 
  475. be saved. None of its updatable columns have a table name." This may mean that 
  476. the driver does not support the MetaData functions used by JBCL. The solution is to 
  477. set metaDataUpdate on the QueryDataSet to MetaDataUpdate.NONE, which 
  478. bypasses obtaining MetaData information. What this means is that the following 
  479. properties, which would otherwise have been set automatically, will now have to 
  480. be set by hand. For Column, the properties are rowId, precision, scale, and searchable; for 
  481. QueryDataSet, the properties are tableName and schemaName.
  482.  
  483. For more information on MetaData, please refer to Working With Columns in the 
  484. Database Application Developer's Guide.
  485.  
  486. To make a query updatable :
  487.   - If UpdateMode is ALL_COLUMNS (default), set tableName on queryDataSet.
  488.   - If the app has a QueryResolver, and UpdateMode is KEY_COLUMNS, set rowId 
  489.    on the columns used as an index to the table.
  490.   - If you have a BLOB column, set the searchable property to false. This means never use 
  491.    this column in a WHERE clause of an update query. Most databases don't 
  492.    support this for BLOBs.
  493.  
  494. K. Database - Resolving
  495. -----------------------
  496. While troubleshooting resolution problems, keep in mind that it is not necessarily 
  497. columns that you have edited that are causing an error. For instance, the problem
  498. might stem from columns which are included in the WHERE clause of the update 
  499. query.
  500.  
  501. If you get a message to the effect that no rows were affected by the update query, 
  502. it could just mean that someone modified the original row, causing the WHERE 
  503. clause to fail. Use QueryDataSet.refetchRow() to get the original row from the 
  504. server.  If it is not the case that the original row has been modified, the following
  505. are some other possible causes.
  506.  
  507. Columns of certain datatypes and fields which are calculated on the server could 
  508. cause the comparison in the WHERE clause of the update query to fail. You could 
  509. run into this problem, if for instance:    
  510. - Column is of imprecise data types (such as floats and doubles);
  511. - Column is a fixed length string (some drivers don't pad strings with blanks, 
  512.   which leads to failures in comparison);
  513. - Column is calculated on the server, and successive saveChanges calls (without 
  514.   an intervening refresh) are made. 
  515.  
  516. There are two possible solutions:
  517.  
  518. Set metaDataUpdate to MetaDataUpdate.NONE, and set the searchable property 
  519. of the column in question to false, so that the column is not included in the 
  520. WHERE clause of the update query. Note that this means you will have to set 
  521. other properties as well to make the query updatable, as described in "To Make 
  522. a query updatableö in text above.
  523.  
  524. Add a QueryResolver to the app, and set UpdateMode on the QueryResolver to  
  525. KEY_COLUMNS. This is done by instantiating a QueryResolver component, and 
  526. setting the resolver property of the QueryDataSet to that QueryResolver.
  527.  
  528. Problem: You get error messages from the server that are not due to constraint 
  529. or integrity violations -- the text of the message will vary from server to server.
  530.  
  531. Possible Explanation 1: If you have a manually added or calculated field in your 
  532. app, this column is being included in the update query (in the SET and/or WHERE 
  533. clauses) and this is causing the resolution to fail. Workaround: Set the resolvable 
  534. property of the column to false. This prevents JBuilder from trying to resolve 
  535. changes to this column back to the server. Note: to prevent unwanted edits to 
  536. columns, set the editable property to false for that column.
  537.  
  538. Possible Explanation 2: It may be that your driver does not support prefixing field 
  539. names with table names (for example. testtable.column1). The workaround is to set 
  540. useTableName in the database to false.
  541.  
  542. Possible Explanation 3: MetaDataUpdate has been set to NONE, but searchable 
  543. has not been set to false for BLOB columns. In this case the workaround is to
  544. set the searchable property to false. See the ôProviding problemö in text above 
  545. for more details.
  546.  
  547. L. Working with Columns
  548. -----------------------
  549. The Column objects within a DataSet can be assigned properties just
  550. like any other component in JBuilder. These properties include both
  551. metadata (such as data type, precision, etc.) as well as visual
  552. properties (font, color, etc.)
  553.  
  554. To edit the properties of a Column, you open the DataSet by clicking
  555. the "+" icon next to the DataSet in the Component Tree. If the DataSet
  556. can be opened, the Component Tree shows all of the Column objects
  557. as child nodes of the DataSet. Now, you can click on any of these
  558. Column objects, and the Inspector displays its properties.
  559.  
  560. If you change any of these properties, JBuilder generates code
  561. (which you can view in the Content pane) to assign that property
  562. value at runtime. Any column which has such source code associated
  563. with it is called a persistent Column, because these values have
  564. been explicitly made persistent via source code. Persistent Columns
  565. are shown by surrounding their name in the Component Tree with
  566. square brackets ("[like this]").
  567.  
  568. Note that there is always a <new column> node under all the other
  569. Columns. You add new Columns to a DataSet by editing any property
  570. of this <new column> component. This is typically how you go about
  571. defining the Columns in a TableDataSet or adding calculated or aggregate
  572. fields to any kind of DataSet.
  573.  
  574. There is one side-effect of making a Column persistent that you should
  575. consider. All persistent Columns are logically moved to the start of
  576. the list of Columns. This means they will no longer appear in the
  577. order they are found, for example, in a QueryDataSet.
  578.  
  579. The order the Columns are named in the setColumns() statement is the order
  580.  these Columns will have at runtime, regardless of the order these Columns 
  581. appear in a select statement of a query. Any Columns not listed in the setColumn()
  582. but appearing in the output of the query are appended to the end of the
  583. list of persistent Columns.
  584.  
  585. If you do not like this new Column order, manually edit the code in the 
  586. dataSet.setColumns() methods you find in your source code window to
  587. list the columns in the desired order.
  588.  
  589. Though you are not required to set any Column properties in order to use
  590. them, you will probably find that certain properties (such as width) will
  591. give your presentation a more customized look at runtime.
  592.  
  593. For more information on working with columns, see "Working with Columns" under 
  594. "Accessing Data" in the Database Application Developer's Guide.
  595.  
  596. M. Help System
  597. --------------
  598. JBCL Reference: Simple properties are listed in the Properties section for
  599. each class. Array and indexed properties are listed in the methods 
  600. section. (7137)
  601.  
  602. Pressing Enter to bring up the content for an index entry actually
  603. brings up content for the next entry in the index. The workaround is to
  604. double-click on the desired index entry. (7370)
  605.  
  606. JBuilder hangs when you try to get context-sensitive help from within 
  607. the Help Viewer itself by pressing F1. (7255)
  608.  
  609. N. Wizards
  610. ----------
  611. Be sure that you have built all your .class files before running 
  612. the Deployment Wizard. If you see the "Can't find .class files" 
  613. message from the Wizard, you have probably forgotten to compile 
  614. your project first.
  615.  
  616. Additionally, be sure to add any .properties, .txt, and .schema files you
  617. wish to deploy to your project so that they can be seen by the Deployment
  618. Wizard. Note that you may first need to use Tools|Treat As Text in order to
  619. add those files to your project.
  620.  
  621. We also suggest that you only invoke the Deployment Wizard once per 
  622. JBuilder session in this release, including wizard invocations you 
  623. cancel. There are some problems with the Wizard that only show up
  624. if you invoke it more than once during a JBuilder session, such as 
  625. zero-length manifest files, older versions of .mf files in the 
  626. archive, or running low on memory. (7692)
  627.  
  628. In the Expression Assistant of the Interaction Wizard Editor, the 
  629. checkbox labeled This method exposed to interactions is not checked by 
  630. default. Usually you want to check that option. (7036)
  631.  
  632. In the Application Wizard, the case must match the actual case of the 
  633. directory path when specifying the directory path of  your project file. (6679)
  634.  
  635. The Project, Application, and Applet Wizards require you to have more 
  636. than one node in your source path. If you only have one node
  637. in your source path, the workaround is to add a dummy node
  638. (e.g. c:\jbuilder\myprojects; c:\temp). (7224)
  639.  
  640. If the location of your project is not in or under a directory on your source 
  641. path, using the Frame, Panel, Dialog or DataModule Wizards puts the 
  642. new file in a package on your source path, not where your project is. The
  643. workaround is to add to your source path the location of your project, or 
  644. some directory other than the root above its location. (5839)
  645.  
  646. Be sure that the first entry on your source path is a directory and not a zip file. 
  647. Wizards that create files assume the first node on the source path is a 
  648. directory name. The actual filename is generated by taking this directory name 
  649. and appending the package, if any, and treating the classname as the 
  650. filename. (7727)
  651.  
  652. Closing a project while a Wizard is starting up can hang JBuilder. (7567)
  653.  
  654. If the root directory of any drive is selected in the Source Path selection 
  655. dialog box, a backslash is included at the end of it. This can cause problems 
  656. when Wizards are used to create files, as they automatically append another 
  657. backslash to the path, resulting in a double backslash. The workaround is
  658. to remove the extra backslash from the path. (6636)
  659.  
  660. To be able to drop a wrapped applet to a frame or panel, you must add your 
  661. output path (usually "..\myclasses") to the IDEClassPath. With JBuilder not running,
  662. edit the file, ..\bin\JBuilder.INI. Find the line that begins with "IDEClassPath=". 
  663. At the end of this line, add the string ";..\myclasses", substituting your own
  664. output path if it differs. (7893)
  665.  
  666. On the Parameters page of the Applet Wizard, after entering a parameter, click away 
  667. from that field to another field in the grid to commit your change. Pressing OK or 
  668. Enter moves to the next page of the Wizard without committing your last change. (7907)
  669.  
  670. After using the Resource Wizard to change your project, be sure to recompile
  671. the project by selecting either Build | Make Project, or Build | Rebuild Project. 
  672. Otherwise, if you try to run or debug your project, strings may be missing from your 
  673. user interface, and you may see the runtime message, 
  674. "java.util.MissingResourceException: Can't find resource at... ." (7514)
  675.  
  676. O. KL Group Components
  677. ----------------------
  678. Adding event code to some components results in an error when compiling. 
  679. The error reports that the event adapter should be declared abstract because 
  680. it does not implement all the methods of an interface. This happens because 
  681. the adapter for this event type is missing. The workaround is to invoke
  682. Wizards | Implement Interface, select the appropriate adapter class from the 
  683. Class Name drop down, browse for jclass.awt.*,  and select the appropriate 
  684. interface in the Available Interfaces tree. After doing this, your 
  685. code will compile. (7172)
  686.  
  687. JCCheckbox doesn't display properly when set to MIDDLELEFT. The workaround
  688. is to set the property to TOPLEFT, and it displays as expected (7632)
  689.  
  690. Setting some properties results in a null where the classname of the static 
  691. constant should be. It will look something like this: nullPLACE_BOTTOM.
  692. The workaround is to change "null" to a class depending on the component. 
  693. For Table, use jclass.table.JCTblEnum.
  694. For ChartComponent, use jclass.chart.JCChartComponent.
  695. For Chart axis, use jclass.chart.JCAxis.
  696. For Chart legend, use jclass.chart.JCLegend.
  697. Anything else should use jclass.bwt.BWTEnum. (7336)
  698.  
  699. P. Using ObjectStore PSE with JBuilder
  700. --------------------------------------
  701. Object Design (http://www.odi.com) has a Java object-oriented database product 
  702. called "ObjectStore PSE" that can be used with JBuilder.
  703.  
  704. To use PSE with JBuilder:
  705.  
  706. 1. In File | Project Properties | Project add <PSE dir>\pse.zip
  707.     to the "Class Path:" field.
  708. 2. Build your application.
  709. 3. In a Command Console window, run the PSE class file post-processor
  710.     (osjcfp) as specified in the PSE documentation.
  711. 4. Copy *ALL* of the post-processed (annotated) classes from the osjcfp
  712.     output directory into your project directory, effectively replacing the
  713.     non-annotated version of your classes with the newer annotated versions.
  714. 5. In JBuilder select File | Project Properties | Run/Debug (tab) and check to 
  715.     see that the Compile project before debugging option is NOT checked.
  716. Now you can Run | Debug your application.
  717.  
  718. Yu cannot simply run your application in JBuilder, nor can you 
  719. make changes to your classes without going through steps 3 and 4 
  720. above. Here's why: JBuilder prepends the Project directory to the 
  721. front of the CLASSPATH directories. This causes the non-annotated 
  722. classes to be loaded BEFORE the annotated classes. Currently, 
  723. there is no way of short-circuiting this feature.
  724.  
  725. Summary: To use PSE with JBuilder you must:
  726. 1. Place all annotated classes in the Project directory,
  727.     overwriting the non-annotated versions.
  728. 2.  Run | Debug only (with compiling turned off).
  729.  
  730. Q. Deploying Applications and Applets
  731. -------------------------------------
  732. For information about deploying Applications and Applets,
  733. see the ôDeploying Java Programsö section in the JBuilder 
  734. User's Guide. The online copy of that document contains
  735. later information than that found in the printed version.
  736. The information provided below is supplemental to the 
  737. JBuilder 1.0 online documentation. It may be partially 
  738. obsolete by the time you read it, so please visit the 
  739. JBuilder Web page at http://www.borland.com for the latest 
  740. updates of deployment documentation.
  741.  
  742. Deploying an Application
  743. ------------------------
  744. See the instructions in the online version of the ôDeploying 
  745. Java Programsö section in the JBuilder User's Guide.
  746. Note that for final deployment of JDK1.1 applications,
  747. you should now use JRE.EXE rather than JAVA.EXE to launch
  748. your application's class. JRE.EXE is a freely redistributable
  749. runtime VM, available in the JBuilder\bin directory, and
  750. also freely downloadable from the JavaSoft Web site. 
  751. JAVA.EXE is not intended to be redistributed, rather
  752. it is for use as part of the development kit only.
  753. For more information, see the JRE download at:
  754.  http://java.sun.com/products/jdk/1.1/index.html
  755.  
  756. In summary, you can use JRE to launch the class containing
  757. your application's main() method. JRE looks for
  758. the remaining classes and archives in the locations
  759. indicated in the classpath. You can specify this with
  760. the -classpath command line argument to JRE.
  761.  
  762. A simple example:
  763. 1. Close all existing projects
  764. 2. Use File|New... Application to create a new project and untitled1.Application1
  765.     in myprojects\untitled1
  766. 3. Design your application's Frame1 (for example, drop a button on it and hook up 
  767.     an event).
  768. 4. Compile your application.
  769. 5. Create a directory in which you will test an installation/deployment of your application,
  770.     for example:  c:\test
  771. 6. Install the Java Runtime Engine onto your path.
  772.    (During test, you can run \jbuilder\bin\setvars.bat 
  773.    to get the JRE into your path and environment correctly.)
  774. 7a. If you are deploying your application as class files:
  775.      create the directory: c:\test\untitled1. Then, enter this command:
  776.      copy jbuilder\myclasses\untitled1\*.class c:\test\untitled1\.
  777. 7b. If you are running the Deployment Wizard to bundle your
  778.      Application1, Frame1, and dependency classes into one .jar file,
  779.      use this command: copy jbuilder\myclasses\untitled1.jar c:\test
  780. 8. If you excluded the JBCL and JGL dependencies from your untitled1.jar, 
  781.     use these commands:
  782.     copy \jbuilder\redist\jbclrt.jar c:\test\.
  783.     copy \jbuilder\redist\jgl.zip c:\test\.
  784. 9. Type: cd c:\test
  785. 10. Type: jre -cp .;jbclrt.jar;jgl.zip untitled1.Application1
  786. 11. Alternatively, on your development machine, you can skip step 8,
  787.      and just use this command:
  788.      jre -cp .;\jbuilder\lib\jbcl.zip;\jbuilder\lib\jgl.zip untitled1.Application1
  789.  
  790. Deploying an Applet as .class files (JDK 1.02 or 1.1)
  791. -----------------------------------------------------
  792. 1. Build your Applet in JBuilder. Compile the project.
  793.    For the purposes of these instructions, we will
  794.    use an example of your project existing in 
  795.    jbuilder\myprojects\untitled1\untitled1.jpr,
  796.    and your Applet1.java having the package name of untitled1.
  797.  
  798. 2. Copy your HTML file to the target directory.
  799.    For example, if the computer has a c:\http directory
  800.    that is what the web server makes visible as the root of
  801.    the web page directory structure, and if you have
  802.    a subdirectory there called "joe" where you can put
  803.    your files, you would use something like:
  804.      copy c:\jbuilder\myprojects\untitled1\Applet1.html c:\http\joe\.
  805.  
  806. 3. Copy your .class files to the appropriate subdirectory,
  807.    based on their packageÆs name, of the location named in
  808.    the CODEBASE tag.  If you donÆt do this, you get a
  809.    cryptic error message from the AppBrowser, such as 
  810.    ClassFormatError.
  811.    To continue the above example, let's say your Applet class
  812.    is untitled1.Applet1, and your CODEBASE parameter in the
  813.    APPLET tag is ".". You should use a copy command like this:
  814.      copy c:\jbuilder\myclasses\untitled1\*.class c:\http\joe\untitled1
  815.  
  816. 4. If your Applet uses JBCL, be sure to copy the necessary JBCL and JGL
  817.     classes to the server also. If your Applet uses a JDBC connection, then
  818.     be sure that the JDBC driver client classes are there also.
  819. 4a.Specifying a name for the JDBC driver name parameter of 
  820.     borland.jbcl.dataset.ConnectionDescriptor( )causes an applet security 
  821.     violation. Alternatively, pass an empty string as the driver name, and 
  822.     preload the driver class as follows:
  823.     Class.forName(jdbcDriverName);
  824.     database.setConnection(new borland.jbcl.dataset.ConnectionDescriptor(jdbcURL, 
  825.     jdbcUserName, jdbcPassword, false, ""));
  826.  
  827. 5. Load c:\http\joe\Applet1.html in your Web browser as a local file for initial testing.
  828.  
  829. 6. Test via the Web server, by loading the http URL that represents 
  830.     joe\Applet1.html in your Web browser
  831.  
  832. Deploying an Applet as a Java archive file (JDK 1.1 only)
  833. ---------------------------------------------------------
  834. 1. Build your Applet in JBuilder. Compile the project.
  835.    For the purposes of these instructions, we will
  836.    use an example of your project existing in 
  837.    jbuilder\myprojects\untitled1\untitled1.jpr,
  838.    and your Applet1.java having the package name of untitled1.
  839.  
  840. 2. Run the Deployment Wizard, selecting the applet java file(s)
  841.    and any necessary image files. To see them in the Deployment
  842.    Wizard, add them to your project first.
  843. 2a Do NOT select the .jpr or any .html files. They should not be
  844.     in your .jar file.
  845. 2b If you leave JBCL and JGL excluded, you will need to deploy
  846.     three .jar files in step 3.
  847. 2c If you turn off the exclusion of JBCL and JGL, your archive
  848.     will be larger, but will contain all the necessary .class files in a single 
  849.     .jar, and so you will need to deploy only the one .jar file.  One way to 
  850.     get all the necessary JBCL images is to add the following two
  851.     packages to the project:
  852.        borland.jbcl.control.image
  853.        borland.jbcl.view.image
  854.     You could also add only selected images these packages instead.
  855.     In this example, you could name your archive untitled1.jar.
  856.  
  857. 4. Modify your HTML page to add an ARCHIVE parameter to the APPLET
  858.    tag. The value of this parameter should be the name of the
  859.    .jar file, or a comma-separated list of the jar files, that
  860.    you created in step 2.  For example:
  861. 3a If you deployed all of your .class files, including JBCL and JGL
  862.     dependencies, into a single .jar file, use something like this:
  863.     ARCHIVE="untitled1.jar"
  864. 3b If you excluded JBCL and JGL, then you will also need to
  865.     deliver the JBCL and JGL files, using an ARCHIVE tag something 
  866.     like this:
  867.     ARCHIVE="untitled1.jar,jbclrt.jar,jgl.jar"
  868.     Check the redistribution details in your license agreement
  869.     to see exactly what you can redistribute.
  870. 3c An intranet alternative to 3b would be to install the jbclrt.jar
  871.     and jgl.jar files in the local classpath for the browsers
  872.     that will be viewing your applet, and then just putting
  873.     the applet jar file on the server. The parameter would then
  874.     be just this:
  875.     ARCHIVE="untitled1.jar"
  876. 3d In any case, your CODEBASE and CODE tags would remain something 
  877.     like this:
  878.     CODEBASE="."
  879.     CODE="untitled1.Applet1.class"
  880.  
  881. 4. Copy your HTML file to the target directory.
  882.    For example, if the computer has a c:\http directory
  883.    that is what the web server makes visible as the root of
  884.    the web page directory structure, and if you have
  885.    a subdirectory there called "joe" where you can put
  886.    your files, you would use something like:
  887.      copy c:\jbuilder\myprojects\untitled1\Applet1.html c:\http\joe\.
  888.  
  889. 5. Copy your archive file(s) to the server location 
  890.     indicated in the CODEBASE tag.  For example:
  891.     copy c:\jbuilder\myclasses\untitled1.jar c:\http\joe
  892.     Note that since the archive already contains the structure
  893.     for the untitled1 subdirectory, you do NOT place the archive
  894.     file down in an untitled1 subdirectory, but directly
  895.    into the directory indicated in CODEBASE.
  896. 5a If you are using step 3b, copy all of your archive
  897.     files, including JBCL and JGL runtime archives, to the same location.
  898. 5b If your Applet uses JDBC data connections, be sure to copy the
  899.     appropriate JDBC client driver class archive (e.g. Interclient.jar)
  900.     to the server.
  901. 5c If you are using step 3c, copy your applet jar file to
  902.     that location, and, separately, get your browser clients
  903.     to all have the JBCL and JGL runtime archives listed
  904.     explicitly in their classpaths. Check the browser(s)
  905.     you will be using to see how this is done, or whether
  906.     these archives may already be present in their delivered archives.
  907.     For example, for MS Internet Explorer the local archives are listed
  908.     under the registry entry:
  909.     Hkey_Local_Machine/Software/Microsoft/Java VM
  910.  
  911. 6. Load c:\http\joe\Applet1.html into your Web browser as a local
  912.    file for initial testing.
  913.  
  914. 7.  Test via the web server by loading the http URL that represents
  915.       joe\Applet1.html into your Web browser.
  916.  
  917. Viewing JDK 1.1 Applets
  918. -----------------------
  919. We anticipate that the popular Web browsers will be fully JDK 1.1 
  920. compatible by the time you are deploying JDK1.1 Applets. If,
  921. during early development, this is not widely the case yet,
  922. you can use the following tools to view JDK1.1 Applets
  923. in the meantime:  (information here is from 7/97)
  924.  
  925. 1. JDK1.1 Appletviewer, which is integrated into JBuilder
  926.     and used for running and debugging applets, is fully 1.1
  927.     compliant. When you run or debug an Applet in JBuilder, 
  928.     you are actually seeing its UI in Appletviewer.
  929.     Appletviewer can also be run standalone if you want to
  930.     demo your Applet separately from JBuilder and have no 1.1
  931.     browser available.
  932.     You can launch Appletviewer on the command line, 
  933.     pointing it at the HTML file containing the Applet tag, 
  934.     but it only shows the Applet itself, not any of the other 
  935.     HTML content. You may need to run jbuilder\bin\setvars.bat,
  936.     with one parameter indicating the location of your
  937.     JBuilder directory, in the same console session before 
  938.     running Appletviewer for it to know where all the
  939.     class files are located.  See the notes in setvars.bat for
  940.     more information on its use.
  941.  
  942. 2. HotJava, available from Sun, is an all-Java browser that
  943.    should be fully 1.1 compliant.
  944.  
  945. 3. Internet Explorer version 3.02 can be patched with the
  946.    Microsoft SDK for Java to bring it up to JDK 1.1 compatibility.
  947.    Internet Explorer version 4 contains a JDK 1.1-compatible VM.
  948.    It also contains a Microsoft version of Appletviewer.
  949.  
  950. 4. Netscape has announced upcoming JDK1.1 support in Navigator.
  951.  
  952. 5. Search the Web sites  of your favorite Web browsers to see
  953.     the current status of their support for JDK 1.1.
  954.  
  955. How to build and deploy a 1.02 Applet for a 1.02 browser
  956. --------------------------------------------------------
  957. If you must create an Applet that will be used in a 
  958. JDK1.02-only browser, and you don't have a 1.02 
  959. development tool, you can, with some extra efforts, 
  960. create or maintain 1.02-compatible Applets in JBuilder, as follows:
  961.  
  962. To maintain an existing applet, just be sure to stick with
  963. 1.02 Java features.  See suggestions below.
  964.  
  965. To create a new Applet for 1.02 use:
  966. 1.  Use File | New Applet to create the html and java files.
  967.  1a Select the option for Generate Standard Methods.
  968.  1b Create any parameters needed.
  969. 2.   In the java source for the Applet, do these things:
  970.  2a Remove the imports for borland.jbcl and java.awt.event stuff:
  971.        import borland.jbcl.layout.*;
  972.        import borland.jbcl.control.*;
  973.        import java.awt.event.*;
  974.  2b Remove the XYLayout instantiation and usage lines:
  975.      At the top of the class:
  976.        XYLayout xYLayout1 = new XYLayout();
  977.      In jbInit:
  978.        xYLayout1.setWidth(400);
  979.        xYLayout1.setHeight(300);
  980.        this.setLayout(xYLayout1);
  981.  
  982. 3. Develop your applet using only 1.02 features.
  983. 3a Use only the components on the AWT tab of the palette.
  984. 3b Use the default layout (Flow) for the applet, or use
  985.      1.02-style layout management.  Do not use XYLayout at all.
  986. 3c You will probably have to change all .add statements from something 
  987.      like this:
  988.        this.add(button1, null);
  989.      to something like this:
  990.        this.add(button1);
  991. 3d Use only properties whose setter and getter methods were already
  992.      defined in JDK1.02. For example, in JDK1.02, java.awt.Button
  993.      had a label property (setLabel, getLabel), so it would be
  994.      safe to use that one in the Inspector. 
  995.      If in doubt, refer to some 1.02-version documentation to know 
  996.      what methods you can call in 1.02.
  997. 3e Do not hook up events using the Events tab of the inspector
  998.      (JBuilder's Inspector generates JDK1.1-style event mechanisms)
  999.      Instead, use 1.02-style event handling only.
  1000. 3f  In general, code your application by hand. The Designers
  1001.     and Wizards generate 1.1 code.
  1002.  
  1003. 4. Compile your Applet.
  1004.  
  1005. 5. You can test it initially in JBuilder/AppletViewer as you 
  1006.     would a JDK1.1 applet.
  1007.  
  1008. 6. The code generated by JBuilder from 1.02-compliant source
  1009.     should be compatible with 1.02 virtual machines. As an additional
  1010.     precaution, and to verify that it conforms strictly to 1.02 
  1011.     patterns, you could also compile it with a JDK1.02 version of 
  1012.     javac.exe and use the JDK1.02 class libraries.  
  1013.  
  1014. 7. Deploy your Applet as .class files.  Do not use the Deployment
  1015.     wizard, because 1.02 browsers do not know how to read java 
  1016.     archive files and don't recognize the ARCHIVE tag in HTML.
  1017.  
  1018. -------------------------------
  1019. SECTION 2. International Issues
  1020. -------------------------------
  1021. A. Install
  1022. ----------
  1023. Due to JDK limitations, installation into a directory path 
  1024. containing non-ASCII characters is not supported.  (3235)
  1025.  
  1026. B. Compiler
  1027. -----------
  1028. 1. Native encoded source files:
  1029.  
  1030. By default the compiler uses the encoding appropriate for your 
  1031. environment. The JDK convention is to assume 8859_1 for most Windows 
  1032. environments (Cp1252).  If you use Cp1252 characters within the 
  1033. range of x7F through x9F, then you should explicitly set the
  1034. encoding to be Cp1252.  (5882)
  1035.  
  1036. To select the encoding used by the compiler, click on the IDE 
  1037. Options item in the Tools menu, then select the encoding from 
  1038. the list provided. For the command line compiler, use the -encoding option.  
  1039.  
  1040. 2. Local characters in Identifier names:
  1041.  
  1042. You can use local characters, including multi-byte characters, 
  1043. in identifier names. However, due to a JDK limitation, 
  1044. you can only use ASCII characters in class and package 
  1045. names. Therefore it is suggested that only ASCII 
  1046. characters be used as component names. This is because any 
  1047. event handler classes will use the component name.  (6362)
  1048.  
  1049. 3.  ResourceBundle
  1050.  
  1051. ResourceBundle must be explicitly rebuilt, rather than relying 
  1052. on the Build | Make Project command. To do this, display the 
  1053. pertinent file in the Source content pane, and select the menu 
  1054. command, Build | Rebuild "fileName.java".
  1055.  
  1056. C. Visual Design Tools
  1057. ----------------------
  1058. As for naming components with international characters, see
  1059. the note regarding event handlers under the section above, 
  1060. "2. Local characters in Identifier names:".
  1061.  
  1062. To use the UI Designer with ResourceBundle, you must add your 
  1063. output path (usually "..\myclasses") to the IDEClassPath.  
  1064. With JBuilder not running, edit the file, ..\bin\JBuilder.INI. Find
  1065. the line that begins with "IDEClassPath=". At the end of this 
  1066. line, add the string ";..\myclasses", substituting your own
  1067. output path if it differs.  (7022)
  1068.  
  1069. When using the IME to enter Chinese characters into the Inspector, 
  1070. you should use the keyboard.  Using the mouse can fail to properly 
  1071. enter the character.  (5465)
  1072.  
  1073. There is a JDK limitation when creating localized applications whose 
  1074. menu commands have shortcuts such as Ctrl-S.  For example, under 
  1075. a German locale, the shortcut should appear in the menu as Strg-S, 
  1076. but will always be listed as Ctrl-S.  (6955)
  1077.  
  1078. The KL Group components are backward-compatible with JDK 1.02. 
  1079. Therefore there are international limitations with these components.
  1080. Particularly, the JCTextField and JCComboBox components are 
  1081. limited in how they accept international character input.
  1082.  
  1083. D. Database
  1084. -----------
  1085. 1. Schema file for TextDataFile
  1086. When multi-byte field names are desired, you will need to use Unicode for
  1087. the column names.  You can first create your text file in the native 
  1088. encoding format and then use the command-line command Native2Ascii, a tool 
  1089. included with the JDK, to convert the file to Unicode.This command is 
  1090. explained in the JDK documentation.
  1091.  
  1092. 2. Text file for TextDataFile
  1093. When importing a text file with native encoding you must specify the encoding 
  1094. in the schema file. For example, if you are trying to import a file containing
  1095. SJIS characters you must change your encoding in the schema file from 8859_1 
  1096. to SJIS.
  1097.  
  1098. /----------------------- END OF FILE --------------------------/
  1099.  
  1100.