On Feb 8, 9:02 pm, Knute Johnson <nos...@rabbitbrush.frazmtn.com>
wrote:
phillip.s.pow...@gmail.com wrote:
On Feb 8, 5:31 pm, Knute Johnson <nos...@rabbitbrush.frazmtn.com>
wrote:
phillip.s.pow...@gmail.com wrote:
I have a JFrame with two JPanels
> >>> Top JPanel p1 contains:
1 JLabel that never changes
1 JComboBox that is populated by dynamic values found in
java.util.Vector
1 JButton
If you press that JButton this method fires off:
[code]
/**
* Process new {@link java.net.URL} request
*/
protected void processURL() {
System.out.println("Your new URL is " +
webAddressBox.getSelectedItem().toString()); // webAddress is
JComboBox
SimpleBrowser.hasEnteredAdditionalURL = true;
setURLPath(webAddressBox.getSelectedItem().toString()); //
WORKS
try {
addToHistoryURLVector(new
URL(webAddressBox.getSelectedItem().toString())); // WORKS
} catch (Exception e) {}
generateWebBrowser(); // WORKS - CREATES
org.jdesktop.jdic.browser.WebBrowser each time you enter in a URL in
JComboBox and press JButton
webAddressBox = null;
generateJComboBox(); // THIS SHOULD CREATE A BRAND NEW
REPOPULATED JComboBox
p1.revalidate();
}
/**
* Populate {@link #webAddressBox} optionally using {@link
#historyURLVector}
*/
private void generateJComboBox() {
if (historyURLVector != null && historyURLVector.size() > 0) {
webAddressBox = new JComboBox(historyURLVector);
} else {
webAddressBox = new JComboBox();
}
if (!SimpleBrowser.hasAddedInitialURL && getURL() != null) {
webAddressBox.addItem(getURL());
} else if (!SimpleBrowser.hasAddedInitialURL && getURLPath() !
= null) {
webAddressBox.addItem(getURLPath());
}
if (getScreenWidth() == 0)
setScreenWidth(SimpleBrowser.DEFAULT_SCREEN_WIDTH);
Dimension dim = new Dimension((int)(getScreenWidth() / 1.14),
(int)(SimpleBrowser.DEFAULT_WEB_ADDRESS_BAR_HEIGHT /
2));
webAddressBox.setMaximumSize(dim);
webAddressBox.setPreferredSize(dim);
webAddressBox.setEditable(true);
webAddressBox.setBackground(Color.WHITE);
}
[/code]
When the JFrame fires up the first time, I see my top JPanel just
right with just one value in it, and the bottom JPanel with the URL
displayed. I enter another URL into the JComboBox and click the
JButton; while the bottom JPanel refreshes with a brand new URL
displayed, the top one shows ONLY the new URL; I want to display a
total dropdown of ALL URLS you have ever entered from the first until
now as a "historyURLVector" so to speak. The values in
java.util.Vector accurately reflect that you have now 2 URLS for
example instead of just the initial 1 URL, but the JCombBox only shows
1 URL when you want to see all of them.
Best way to understand this would be very easy: just like your address
bar in your browser should show multiple URLs, so should mine, but I
can't figure out how to do this part of it all the while having a semi-
working simple browser.
Thanx
Phil
Where do you remove the old JComboBox and add the new one?
processURL() sets JComboBox webAddressBox to null; generateJComboBox()
generates a brand new JComboBox webAddressBox
You need to remove the old component and add a new component. Just
replacing the reference won't get it done.
but wouldn't that be accomplished this way:
<pre>
[code]
/**
* Add all available panels to the {@link SimpleBrowser} (extends
{@link javax.swing.JFrame})
*/
public void addToFrame() {
setLayout(new GridBagLayout());
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.anchor = GridBagConstraints.NORTHWEST;
add(p1, c);
if (!SimpleBrowser.hasEnteredAdditionalURL) {
c.gridx = 0;
c.gridy++;
c.anchor = GridBagConstraints.CENTER;
add(p2, c);
}
}
/**
* Layout {@link #p1}
*/
private void layoutTopPanel() {
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.anchor = GridBagConstraints.NORTHWEST;
p1.setLayout(new GridBagLayout());
p1.add(new JLabel("Your URL:"), c);
c.gridx++;
c.gridy = 0;
c.fill = GridBagConstraints.HORIZONTAL;
p1.add(webAddressBox, c); // ADD JComboBox
c.gridx++;
c.gridy = 0;
c.fill = GridBagConstraints.NONE;
p1.add(b, c); // ADD JBUTTON
if (getScreenWidth() <= 0)
setScreenWidth(SimpleBrowser.DEFAULT_SCREEN_WIDTH);
p1.setSize(new Dimension(getScreenWidth(),
SimpleBrowser.DEFAULT_WEB_ADDRESS_BAR_HEIGHT));
p1.setOpaque(true);
p1.setBackground(Color.WHITE);
p1.setVisible(true);
}
/**
* Reset {@link #p1}
*/
private void resetTopPanel() {
remove(p1);
p1 = new JPanel(true);
layoutTopPanel();
addToFrame();
}
[/code]
</pre>
Upon attempting this only the bottom JPanel appears upon entering a
new URL from the top JPanel; the top JPanel does not reappear
If you remove/add components I think you need to revalidate().
reason that you can't just change what the existing components are displaying?