-
Bug
-
Resolution: Cannot Reproduce
-
P4
-
None
-
1.1.1
-
x86
-
windows_95
Name: mc57594 Date: 07/08/97
Lightweight Container setLayout(null) does not work
which causes problems when attempting to manually
layout contained heavyweight (with peer) components.
Native peer components are not handled correctly and
end up being placed in the "middle" of the container.
This is the middle "review panel" that is shown
implemented via subclassing Panel at the following
URL: http://www.djtraxx.com/gui/
However, it seems that when subclassing Container
instead, the buttons and "word wrap review canvas"
end up being shifted about 150 pixels to the left
which destroys the formatting control i had when
subclassing Panel.
Is this because Lightweight Containers CANNOT
contain heavyweight "peered" components? If so,
please state this explicitly in your docs as it
could be the cause of many a headache. If you
can fire off an email to let me know the status
of this you could save me a ton of trial and
error work.
public final class reviewPanel extends Container
{
public int itemindex,itemcount;
//these are protected so our event handler
//can check their state
protected Button order,play,next,prev;
private Font buttonFont;
private Font reviewFont;
private WordWrapCanvas review;
protected final static int THIS = 0;
protected final static int ORDERBUTTON = 1;
protected final static int PLAYBUTTON = 2;
protected final static int NEXTBUTTON = 3;
protected final static int PREVBUTTON = 4;
private String title=null,artist=null,label=null,price=null;
reviewPanel() {
super();
setLayout(null);
ProgramManager.rp = this;
reviewPanelEventHandler evt = new
reviewPanelEventHandler(this,THIS);
this.addKeyListener(evt);
buttonFont = new Font("Helvetica",Font.PLAIN,11);
reviewFont = new Font("TimesRoman",Font.BOLD,14);
evt = new reviewPanelEventHandler(this,PLAYBUTTON);
play = new Button("Listen");
play.setFont(buttonFont);
play.addActionListener(evt);
play.addMouseListener(evt);
add(play);
play.setBounds(266,6,95,20);
evt = new reviewPanelEventHandler(this,PREVBUTTON);
prev = new Button("<<");
prev.setFont(buttonFont);
prev.addActionListener(evt);
prev.addMouseListener(evt);
add(prev);
prev.setBounds(266,31,47,20);
evt = new reviewPanelEventHandler(this,NEXTBUTTON);
next = new Button(">>");
next.setFont(buttonFont);
next.addActionListener(evt);
next.addMouseListener(evt);
add(next);
next.setBounds(314,31,47,20);
evt = new reviewPanelEventHandler(this,ORDERBUTTON);
order = new Button("Order");
order.setFont(buttonFont);
order.addActionListener(evt);
order.addMouseListener(evt);
add(order);
order.setBounds(266,56,95,20);
review = new WordWrapCanvas(Color.black,Color.green, reviewFont,"
",344,80,0);
add(review);
review.setBounds(14,82,344,80);
order.setLabel("Order");
play.setEnabled(false);
prev.setEnabled(false);
next.setEnabled(false);
order.setEnabled(false);
} //end constructor
public final synchronized void update(Graphics g) {paint(g);}
public final synchronized void paint(Graphics g) {
g.setColor(Color.lightGray);
g.fill3DRect(0,0,369,178,true);
g.setColor(Color.black);
g.fillRoundRect(6,6,255,70,15,15);
g.fillRoundRect(6,82,356,90,15,15);
g.setColor(Color.lightGray);
g.setFont(reviewFont);
g.drawString("Title:",15,21);
g.drawString("Artist:",15,37);
g.drawString("Label:",15,53);
g.drawString("Price:",15,69);
if (title != null) {
g.setColor(Color.green);
g.drawString(title,61,21);
g.drawString(artist,61,37);
g.drawString(label,61,53);
g.drawString(price,61,69);
}
}
public synchronized void clearReview() {
clearReviewText();
order.setLabel("Order");
play.setEnabled(false);
prev.setEnabled(false);
next.setEnabled(false);
order.setEnabled(false);
}
public void clearReviewText() {
Graphics g = getGraphics();
g.setColor(Color.black);
g.fillRect(61,7,190,64);
g.dispose();
review.updateContent(" ");
}
public synchronized void addReview(CrateItem ci) {
clearReview();
Graphics g = getGraphics();
g.setColor(Color.green);
g.setFont(reviewFont);
g.drawString(title=ci.title,61,21);
g.drawString(artist=ci.artist,61,37);
g.drawString(label=ci.label,61,53);
if (ci.canOrder()) price = "$"+ci.price;
else price = "";
g.drawString(price,61,69);
g.dispose();
review.updateContent(ci.review);
ProgramManager.mc.changeRecordColor(true);
play.setEnabled(true);
if (!ci.canOrder()) order.setLabel("Request");
order.setEnabled(true);
if (CrateManager.currentCrate.onFirstItem())
next.setEnabled(true);
else {
if (CrateManager.currentCrate.onLastItem())
prev.setEnabled(true);
else {
next.setEnabled(true);
prev.setEnabled(true);
}
}
ProgramManager.cp.setRightMessage("Item "+(itemindex+1)+" of
"+itemcount);
}
public void reset() {
itemindex = 0;
CrateItem ci = CrateManager.currentCrate.getCrateItem(0);
itemcount = CrateManager.currentCrate.getNumItems();
addReview(ci);
ProgramManager.mc.resetScrollBarValues(0,itemcount-1,0,itemcount);
}
public void changeReview(int idx,Component source) {
itemindex=idx;
addReview(CrateManager.currentCrate.getCrateItem(itemindex));
if (!(source instanceof Scrollbar))
ProgramManager.mc.setScrollBarValue(idx);
}
public Dimension getPreferredSize() {return new Dimension(370,179);}
public Dimension getMinimumSize() {return new Dimension(370,179);}
/*
########################################################
EVENT HANDLING CODE
########################################################
*/
final class reviewPanelEventHandler extends MouseAdapter
implements ActionListener, KeyListener {
private reviewPanel rp;
private int component_id;
reviewPanelEventHandler(reviewPanel r,int id) {rp=r;component_id=id;};
private void nextReview(int idx) {
idx++;
rp.changeReview(idx,rp);
}
private void prevReview(int idx) {
idx--;
rp.changeReview(idx,rp);
}
public void actionPerformed(ActionEvent e){
int index = rp.itemindex;
switch(component_id) {
case reviewPanel.NEXTBUTTON:
// BUG FIX
// in win32 button remains focused even if diasbled
if (index == (rp.itemcount-1)) return;
//
// BUG FIX
nextReview(index);
return;
case reviewPanel.PLAYBUTTON:
System.out.println("just played item....");
return;
case reviewPanel.PREVBUTTON:
// BUG FIX
// in win32 button remains focused even if diasbled
if (index == 0) return;
//
// BUG FIX
prevReview(index);
return;
case reviewPanel.ORDERBUTTON:
shoppingCrate sc = ProgramManager.sc;
CrateItem ci =
CrateManager.currentCrate.getCrateItem(index);
sc.addItem(ci);
return;
}//end switch
}
public void mouseEntered(MouseEvent e) {
switch(component_id) {
case reviewPanel.NEXTBUTTON:
if (next.isEnabled())
ProgramManager.cp.setLeftMessage("Next Crate Item");
return;
case reviewPanel.PLAYBUTTON:
if (play.isEnabled())
ProgramManager.cp.setLeftMessage("Press Button To Play
RealAudio Sound Clip");
return;
case reviewPanel.PREVBUTTON:
if (prev.isEnabled())
ProgramManager.cp.setLeftMessage("Previous Crate Item");
return;
case reviewPanel.ORDERBUTTON:
//should also see if it's request or order
if (order.isEnabled())
ProgramManager.cp.setLeftMessage("Add This Item To Your
Order");
return;
}//end switch
}
public void mouseExited(MouseEvent e) {
switch(component_id) {
case reviewPanel.NEXTBUTTON:
if (next.isEnabled())
ProgramManager.cp.setLeftMessage("");
return;
case reviewPanel.PLAYBUTTON:
if (play.isEnabled())
ProgramManager.cp.setLeftMessage("");
return;
case reviewPanel.PREVBUTTON:
if (prev.isEnabled())
ProgramManager.cp.setLeftMessage("");
return;
case reviewPanel.ORDERBUTTON:
if (order.isEnabled())
ProgramManager.cp.setLeftMessage("");
return;
}//end switch
}
}//end innerclass
}//end class
======================================================================