Re: Confused about refere
To: comp.lang.java.gui
jamestechinfo@yahoo.com wrote:
All this info makes since, and makes for a valid discussion on the
best way to implement JFrames, ComboBox info, etc., but its not really
the point of my post, which is 'referencing info stored in a JFrame'.
Lets note that for future reference.
* Note The point of jamestechinfo's post is
'referencing info stored in a JFrame'.
I know I can get a little too wordy, but please read at least read
this post in its entirety before responding so the information
contained in the rest of the thread applies to the topic.
Ok
Thats not
to say I don't appreciate the responses/info, but I think that,
especially with all the spam and a low activity rating on the group
from google, that it is best if we do our best to keep a threads info
tied to its title.
You're welcome, and I agree.
Whether they are extensions of JFrames or regular JFrames with
additional info declared inside them, JFrames can definitely contain
information which may need to be accessed or changed by components.
Yes, JFrames can do that, but...
The point of this thread is what are the options for doing this.
* Note Topic clarification.
What are the options for referencing info stored in a JFrame.
Example: You want to make a ComboBox which changes the window size to
certain presets, maintained in the list.
*Note Example shift from previous posts.
Use the ComboBox DATA MODEL and the AWT EVENT API.
As Jeff has illustrated with links to examples, the obvious way to do
this is to ask for/pass the JFrame during the components constructor/
construction. This is the simplest answer I can think of, but it
presents problems:
The examples I cited:
Using a Custom Data Model
http://preview.tinyurl.com/2kskc9
A Class was defined:
class ArrayListComboBoxModel
extends AbstractListModel
implements ComboBoxModel
It had a main method which instantiated a local Jframe
object,the constructor for the JFrame was passed a String ,
"The title of the JFrame".
The constructor of the single JComboBox was passed a
reference to an instance of an ArrayListComboBoxModel,
that instance was a local to the main method of
ArrayListComboBoxModel.
The example was intended to illustrate the use of the
ListModel and ComboBox interfaces
as pointed to in my previous post.
Sharing the Data Model for a JComboBox and JList
http://preview.tinyurl.com/2wqh86
Ditto above.
---------------------------
1) My Netbeans problem:
Yes. <dragons>
* Note Major topic shift.
In Netbeans, and thus likely in other IDE's, the part of the code
which populates components into the JFrame is automatically generated,
and thus, can not be edited in-line without the edits being
overwritten during the next build/compile (probably before then, I'm
not familiar with the specifics). This means you must use the IDE's
property configuration tools, which can be less than self-explanatory,
and, as is the case in netbeans, do not offer code completion, which
can be an important productivity tool.
*Also of note is that when I attempt to make the JFrame and/or dbInfo
part of the info received by the components constructor,
What component? A java.awt.Component?
According to the API6 Javadocs java.awt.Component has this constructor:
Component()
Constructs a new component.
A javax.swing.JComboBox?
According to the API6 Javadocs javax.swing.JComboBox has these constructors:
JComboBox()
Creates a JComboBox with a default data model.
JComboBox(ComboBoxModel aModel)
Creates a JComboBox that takes its items from an existing ComboBoxModel.
JComboBox(Object[] items)
Creates a JComboBox that contains the elements in the specified array.
JComboBox(Vector<?> items)
Creates a JComboBox that contains the elements in the specified Vector.
Netbean's
visual builder will not allow me to add the component to the form
because it does not have all this info it needs to put it together,
meaning I still have to figure out how to pass info to the constructor
for the visual builder to work, even if the parameters are correct for
configuring the component at runtime. Giving the component dummy data
gets it into the builder, but trying to set its data from my JFrames
main method leads to many entries in the ComboBox being null. This
seems to be a concurrency issue, because if I put add enough function
calls after the initComponents() method and before the
setComboBoxInfo() it works out fine.
This seems like a haphazard way
of handling the situation though.
Yes. Since neither of us knows wtf you just said.
----------------------------
2) There may be legitimate reasons, beyond IDE implementation, to have
the component find out what frame it is in on its own.
java.awt.Components have no need to know of their container.
Look at the Application Programming Interface for
java.awt.Component for details.
I.E. You want to code and distribute for others to use a JAVA
component which is designed to work with the data from a given program
'x'. Giving the component the ability to find the frame simplifies
the process other programmers will have to go through to configure it.
Again, what component?
If you're speaking of a java.awt.Component
other programmers will probably ask wtf.
Use a DATA MODEL and the AWT EVENT API.
Swing widgets mostly cache their data in some 'DATA MODEL'
specific to the particular widget under discussion. They recieve
notification of changes to the data and send notification of changes
to their content through the AWT EVENT API. Your application
will have its own DATA MODEL separate from the GUI wiget
data models and may use the AWT EVENT API to communicate
with the gui data models.
---------------------------
3) There should be more than one way to skin a cat.
There are dozens.
Some more effective, efficent, and less stinky than others.
Maybe I'm crazy, or just ahead of my time, or both...
but it seems to me that there has to be another reasonably simple way
to do this.
Using a system of DATA MODELS and the AWT EVENT API.
If the constructor method is the only safe way to do it,
what are the bad ways and why.
The constructor method, whatever that is, for one.
Does anyone here know how to ask:
'is this panel inside a JFrame or an Applet'
java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JPanel
implements
ImageObserver
MenuContainer
Serializable
Accessible
Yes. <http://java.sun.com/javase/6/docs/api/javax/swing/JPanel.html>
That seems like a darn good question to me.
--------------------------------
Perhaps the solution is to ask the EventQueue what thread is this
component on and what is the JFrame that goes with that thread.
Certainly worth a go. Your dead homies may wake with a hangover though.
Can you post here a sensible example making use of the extended
features of the following extended JFrame, and extended JComboBox?
public class JFrameEx
extends JFrame{
Set<Component> components =
new LinkedHashSet<Component>();
JFrameEx() { super(); }
JFrameEx(String title) {
super(title); }
public void addComponent
(Component component) {
components.add(component); }
public Set<Component>
getComponentsEx() {
return components; }
}
public class JComboBoxEx
extends JComboBox {
JFrame frame;
JComboBoxEx(JFrame frame) {
this.frame = frame; }
}
---
* Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!
--- Synchronet 3.15a-Win32 NewsLink 1.92
Time Warp of the Future BBS - telnet://time.synchro.net:24