Theory: Displaying JPanels in JDialogs
Hi all,
I went ahead and developed my classes as JPanels, as I thought it would be more extensible than if I made them JDialogs directly.
But I didn't think it through. Now when I want to add them to a JDialog, I need to make the JDialog inside the class, so the class can call dispose on it (I actually call setVisible(false)... is one way better than the other?).
This isn't really a hassle, though it defeats the point of making my class a JPanel. What's the accepted practice here? Do people make classes as JPanels, then add them to things? Is there a better way of doing this?
Would I be better off just making my class extend JDialog and do away with the JPanel? (although I'm aiming for extensibility, it's really all theoretical as I can't envision myself or anyone else reusing these classes).
Just want to know way most people do it.
Cheers,
Radish21
Ok, that works for my app. But is this a publicy accepted way of doing things?
Before I get too far, I just want to make sure I'm not doing things ass-about.
Similar Messages
-
Use JWindow, JInternalFrame, JPanel, or JDialog
Hello,
My main window application extends a JFrame. When a component of the JFrame is mouse clicked,I want to open a popup window on top of this frame.
The opened window is used to receive input from the user; with these properties: title bar, resizeable, can close with the "X" on the right side of the title bar, no minimizable or maximizable buttons on the title bar.
1. I am very unsure whether I should use: a JWindow, JInternalFrame, JPanel, JDialog, JPopupMenu (probably not since I don't need a menu) to create the popup window. I think I should use JWindow, but am not sure.
2. Also, I am unsure whether I can use JWindow and JInternalFrame with JFrame as the main app window.
Thank you for your advice.If you want a popup window on top of this frame, you can either choose JFrame, JDialog or JWindow. They all have the own characteristics.
JFrame: Usually application will use it as the base. Because It has a title bar with minimizable, maximizable and exit button.
JDialog: Usually work as a option / peference / about dialog (Ex. Just click the IE about to see). Because it has a smaller title bar with only maximizable and exit button and the model setting. If model is to TRUE, that means all the other area of the window will be disable except the opened dialog own.
JWindow: Usually use as a splash to display logo or welcome message.
JInternalFrame: It display inside a desktop panel of JFrame. Just like the multi-documents function inside the MS Words. -
Hey,
need some help please....
I've searched long and hard but can't find anything.
I've got an application that opens a JDialog, then jDialog has a JPanel within
it.
Once the JDialog has loaded on the screen i want to update the Jpanel based on
a button click.
My problem is that the JPanel wont update.
I've made a simple program that displays the same behaviour.
Frame with a button on it to open a JDialog :
public class testFrame extends javax.swing.JFrame {
/** Creates new form testFrame */
public testFrame() {
initComponents();
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jButton1.setText("Show Dialog");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(150, 150, 150)
.addComponent(jButton1)
.addContainerGap(159, Short.MAX_VALUE))
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(135, 135, 135)
.addComponent(jButton1)
.addContainerGap(142, Short.MAX_VALUE))
pack();
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
testJDialog test = new testJDialog(this,true);
test.setVisible(true);
* @param args the command line arguments
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new testFrame().setVisible(true);
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
// End of variables declaration
}JDialog code :
import javax.swing.JTree;
* @author wesley
public class testJDialog extends javax.swing.JDialog {
/** Creates new form testJDialog */
public testJDialog(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("TitleBorder"));
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 347, Short.MAX_VALUE)
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 128, Short.MAX_VALUE)
jButton1.setText("Add Tree");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGap(145, 145, 145)
.addComponent(jButton1)))
.addContainerGap(31, Short.MAX_VALUE))
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jButton1)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
pack();
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
this.jPanel1.add(new JTree());
this.pack();
this.repaint();
* @param args the command line arguments
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
testJDialog dialog = new testJDialog(new javax.swing.JFrame(), true);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
dialog.setVisible(true);
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JPanel jPanel1;
// End of variables declaration
}Ive tried
this.pack();
this.repaint();but i cant get the JPanel to repaint.
Im using Vista Java version
C:\Users\wesley>java -version
java version "1.6.0_03"
Java(TM) SE Runtime Environment (build 1.6.0_03-b05)
Java HotSpot(TM) Client VM (build 1.6.0_03-b05, mixed mode, sharing)Cheers
Wesleywesleyelder wrote:
Thanks so much for taking the time to reply, that worked a treat.you're welcome
i agree the netbeans code is a mess sometimes but when i just need a simple JDialog i sometimes use it, just lazy a guess :)But then you run into problems like this one. I'd much prefer to make my own simple JDialog:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
public class TestMyDialog
private JPanel mainPanel = new JPanel();
private JPanel centerPanel = new JPanel();
public TestMyDialog()
JButton addTreeBtn = new JButton("Add Tree");
addTreeBtn.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent e)
addTreeAction();
JPanel buttonPanel = new JPanel();
buttonPanel.add(addTreeBtn);
centerPanel.setBorder(BorderFactory.createTitledBorder("Title Border"));
centerPanel.setPreferredSize(new Dimension(400, 200));
centerPanel.setLayout(new BorderLayout());
mainPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
mainPanel.setLayout(new BorderLayout(20, 20));
mainPanel.add(centerPanel, BorderLayout.CENTER);
mainPanel.add(buttonPanel, BorderLayout.SOUTH);
private void addTreeAction()
JTree tree = new JTree();
tree.setOpaque(false);
centerPanel.add(new JScrollPane(tree), BorderLayout.CENTER);
centerPanel.revalidate();
public JPanel getMainPanel()
return mainPanel;
private static void createAndShowUI()
final JFrame frame = new JFrame("Test My Dialog");
JPanel framePanel = new JPanel();
framePanel.setBorder(BorderFactory.createEmptyBorder(200, 200, 200, 200));
framePanel.setPreferredSize(new Dimension(500, 500));
JButton showDialogBtn = new JButton("Show Dialog");
showDialogBtn.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent e)
showDialogAction(frame);
framePanel.add(showDialogBtn);
frame.getContentPane().add(framePanel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
private static void showDialogAction(JFrame frame)
JDialog dialog = new JDialog(frame, "My Dialog", true);
dialog.getContentPane().add(new TestMyDialog().getMainPanel());
dialog.pack();
dialog.setLocationRelativeTo(null);
dialog.setVisible(true);
public static void main(String[] args)
java.awt.EventQueue.invokeLater(new Runnable()
public void run()
createAndShowUI();
} -
Japanese character is not displaying properly in JDialog
Hi All,
Japanese character are shown in parent window but not displaying properly JDialog window.
Even JDialog Title bar is showing in Japanese properly but JLabel's and JButton text are not showing properly in Japanese.
Anybody knows why Japanese characters are not showing properly in JLabel and JButton of JDialog window.
Thanks,
-ManiSpecified font on that objects, that's why Japanese character doesn't shown.
-
Displaying JPanel when clicking nodes in Tree
I've two panes.
the one on the left is a JTree while the one on the right holds a JPanel..
Is there a way such that when i clicked the node of the tree, the correct JPanel would show the pane i want?
thanks!Quit being so impatient. There is no requirement of the forum that says anybody will respond withing 20 minutes. In fact its the weekend and many people are still in bed.
I tend to ignore people who constantly bump posts in a short period of time and who cross post. I hope other do as well. -
Hi.
I'm writing a software with one frame and in its contentPane in made up with two JPanel which changes continuously. The problem is that when I close that main frame the whole computer stops and seemes to enter into deadlock.
Can someone tell me which is the best method to close frames, dialogs and panels (I think it's the reason for my problem).
Now I'm using setVisible for panels and dialogs.
ThanksTry something like :-
public class MyFrame
extends JFrame
public MyFrame()
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter()
public void windowClosing(WindowEvent wndwEvnt)
dispose();
System.exit(0);
}There are other constants (e.g. WindowConstants.DISPOSE_ON_CLOSE if memory serves), that you can use depending on what you want to do when you 'close'. -
JDialog not displaying correctly
Hi all,
Im having this problem with displaying a JDialog. I have a lengthy delay in my app and want to display an animated GIF while the user is waiting. The below code is what im trying to run. The JDialog wil display, but the title text, message text and the ImageIcon are not displayed on the JDialog. Anyone know what is wrong? Do i have to wait on the Image to load before i .show the dialog? But that wouldn't explain why the text doesn't show. Any help appreciated
Code im trying to run, RemoteAdminMain.java
WaitingDialog dialog = new WaitingDialog(this, "Connection...", false, "Creating Connection");
try {
//Create the connection...
dialog.show();
RemoteAdminMain.nc = NetConnection.createNetConnection(nodeAddress, Global.sessionUsername, Global.sessionPassword);
dialog.dispose();
} catch (Exception e) {
dialog.dispose();
JOptionPane.showMessageDialog(null, "Error", "Error", JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
return;
The Dialog code: WaitingDialog.java
public class WaitingDialog extends JDialog {
private JPanel panel1 = new JPanel();
private BorderLayout borderLayout1 = new BorderLayout();
private JLabel jLabel1 = new JLabel();
private JLabel jLabel2 = new JLabel();
public WaitingDialog(Frame frame, String title, boolean modal, String message) {
super(frame, title, modal);
try {
jLabel2.setText(message);
jbInit();
pack();
catch(Exception ex) {
ex.printStackTrace();
//Center the window
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension dialogSize = getSize();
if (dialogSize.height > screenSize.height) {
dialogSize.height = screenSize.height;
if (dialogSize.width > screenSize.width) {
dialogSize.width = screenSize.width;
setLocation((screenSize.width - dialogSize.width) / 2, (screenSize.height - dialogSize.height) / 2);
public WaitingDialog() {
this(null, "", false, "");
void jbInit() throws Exception {
panel1.setLayout(borderLayout1);
jLabel2.setToolTipText("");
jLabel2.setHorizontalAlignment(SwingConstants.CENTER);
jLabel2.setHorizontalTextPosition(SwingConstants.CENTER);
jLabel2.setText("message");
jLabel1.setHorizontalAlignment(SwingConstants.CENTER);
jLabel1.setHorizontalTextPosition(SwingConstants.CENTER);
ImageIcon icon = new ImageIcon(com.tempo.netservice.RemoteAdminMain.class.getResource("swing.gif"));
icon.setImageObserver(jLabel1);
jLabel1.setIcon(icon);
this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
this.setResizable(false);
this.setTitle("");
getContentPane().add(panel1);
panel1.add(jLabel1, BorderLayout.CENTER);
panel1.add(jLabel2, BorderLayout.SOUTH);
}I fear the problem isn't with the JDialog itself, everything is from from that point of view. I forgot to mention that if you set it as Modal, it will display fine (however, the modal method is blocking, meaning the createNetConnection method will not be executed until the dialog is closed, entirly defeating the purpose.
I believe the problem is that the createNetConnection function stops the rest of the JDialog from loading. So i guess my question to begin with is, is there anyway to completly display and paint the JDialog before allowing it to continue onto the next function? -
ProcesskeyEvent not invoked in JDialog andin JPanel
I have overriden processKeyEvent in my class but this method never gets invoked on typing or pressing
a key but the processMouseEvents are invoked properly the JDK Version which I am using is
1.4.1_01 .Please guide what else should be done to handle key events for JDialog or Jpanel
import java.awt.*;
import javax.swing.*;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
public class TestDialog extends JDialog {
public TestDialog(){
this.getContentPane().setLayout(null);
JButton jb = new JButton("HJHJH");
jb.setBounds(10,10,100,30);
this.getContentPane().add(jb);
this.enableEvents(AWTEvent.KEY_EVENT_MASK |AWTEvent.MOUSE_EVENT_MASK);
setSize(300,300);
setVisible(true);
public void processKeyEvent(KeyEvent keyEvent){
System.out.println("Key Event Called");
public void processMouseEvent(MouseEvent mouseEvent){
System.out.println("Mouse Event Called");
public static void main(String args[]){
new TestDialog();Hi
Any component is passed events through processXXX() methods only if the component has focus.
Components like JPanel and JDialog never gain focus as the focus manager in java does not define focuses for a panel or JDialog . instead interactive comp.s like JButton , JTextField have focuses.
Override the setVisible(boolean) method as
public void setVisible(boolean b)
super.setVisible(b);
mycomp.grabFocus();
After this do not click the mouse anywhere else , if clicked the focus will again be lost.
try pressing keys and u'll know why it was happening.
Have fun..
Fire an reply trying this.
RGDS -
Hello Frnds,
my problem is quite weird!! i will try to explain..as much as I can !!
My requirement is I want to show same JPanel in JDialog and JFrame at once..!!
I am adding a
JPanel A ---> JDialog
JPanel A ---> JScrollPanel B
JScrollPane B ---> JFrame.. and making frame and dialog visible together.. but JPanel is visible in dialog only..
if i dont add in JDialog.. then JPanel is visible in frame.. !!.. but why that??
JFrame fr = new JFrame();
JPanel np = new JPanel(); // This JPanel is added Twice
np.setBounds(0, 0, 128, 128);
JScrollPane scroll=new JScrollPane(np); // Once JPanel added here..
scroll.setPreferredSize(new Dimension(385,385));
fr.add(scroll);
JDialog dlg=new JDialog(fr, "Another Panel", false);
dlg.add(np); // Second Time JPanel added here..
dlg.pack();
dlg.setVisible(true);
fr.setVisible(true);Let's make it very clear : it is NOT possible to add
the same instance of a component to two different
containers.
Is it possible to have frame with component.. but on closing that frame component shifts to another frame.. and vice versa I will add to the above:
it is NOT possible to add the same instance of a component to two different containers... at the same time. Does that clarify it?
Why is it so hard to try it yourself?
Instead of waiting a couple of hours hoping someone answers the question you could have solved your problem in a couple of minutes. -
Own JDialog - works with java5, doesn't work with java6
Hello,
I'm working on map editor for a bigger project and I'm stuck with displaying my own JDialog (grrr...). I found out that problem occurs only with java6. See the screenshots below:
java5
http://student.agh.edu.pl/~kdzwinel/Projects/TrafficSim/MapEditor/good.jpg
java6
http://student.agh.edu.pl/~kdzwinel/Projects/TrafficSim/MapEditor/wrong.jpg
And some implementation details:
how do I create new dialog:
NewMapDialog dialog = new NewMapDialog(this);
dialog.setVisible(true);how dialog class looks like:
public class NewMapDialog extends JDialog implements ActionListener, ChangeListener
NewMapDialog(Main owner)
super(owner,"New map",true);
this.setAlwaysOnTop(true);
this.setSize(200, 280);
this.setResizable(false);
this.setLocationRelativeTo(owner);
makeLayout();
private void makeLayout()
Container content = getContentPane();
content.setLayout(new FlowLayout());
//(...) <- add stuff
}That is so simple that I'm really confused. I will appreciate some help.
Regards,
Konrad
Edited by: kdzwinel on Feb 5, 2008 6:23 PMkdzwinel wrote:
Hm, creating my applications I extend JFrame, JPanel, JLabel all the time, what is wrong with extending JDialog?In this case your class contained two methods that were already defined to mean something completely different in the class you derived from. That's just one example of what can go wrong when you use inheritance. Had you used composition rather than inheritance (i.e. your class contained a JDialog rather than being a JDialog) this problem would never have happened.
Such an extension was quite natural for me to use because I was looking for this dialog to be modal. And I guess making JFrame modal is not so trivial.
You can make a modal JDialog without extending JDialog, so that's not a problem.
BTW, funny thing is that this 'mistaken' code worked just fine with java5 - I was confused by this fact so my first guess was that I messed something up with panes/layouts.Another reason you should be careful with inheritance: your program may break from implementation changes in the library code you are using and extending. Maybe Java 5 does not use those two methods when it "draws the dialog". Again, had you been using composition your program would not have been affected.
If you can, get your hands on a copy of "Effective Java" by Joshua Bloch, and read chapter 14 "Favor composition over inheritance". He explains this much better than I can. -
Displaying graphical representation of data in hash tables as bar chart?
I want to be able to display results in my hash table as a bar chart i don't know how to do it could someone help me I've looked through tutorials couldn't find any information that actually helped.
In my program it doesnt allow matching the capital and small letters
so for instance if I already have Mike it allows for me to input mike in again so there are 2 Mikes.
I also want to do a simple user interface the tutorial for it is not simple to understand could any one tell me how to create a simple user interface like putting a button into a place wher i want it to be.
im not asking anyone to do it for me i just want people to show me how to do it
thank you
Edited by: Tek_Hedef on Dec 1, 2007 4:30 AMThanks for the ideas pal but I did have a go at it but my bit of code is making it crash but i removed it now so here's what I have so far
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
class StudentDetails extends JFrame implements ActionListener
private JTextField StudentNameTxt, StudentMarkTxt;
private JButton DeleteStudentDetailsBtn, DisplayAllStudentsBtn, SearchStudentBtn, FailedStudentsBtn, PassedStudentsBtn, DistinctionStudentsBtn, AddStudentDetailsBtn, ExitBtn;
private JPanel DisplayStudentDetailsPnl;
private JLabel StudentNameLbl, StudentMarkLbl;
private JTextArea DisplayResultsTxt;
private Hashtable StudentDetailsTbl;
private String StudentName, StudentMark;
public static void main(String[] args)
StudentDetails frame = new StudentDetails();
frame.setSize(600,600);
frame.createGUI();
frame.setVisible(true);
public void display(JPanel DisplayStudentDetailsPnl)
Graphics paper = DisplayStudentDetailsPnl.getGraphics();
paper.setColor(Color.white);
paper.fillRect(0, 0, 500, 500);
paper.setColor(new Color((int)(Math.random()*255),(int)(Math.random()*255),(int)(Math.random()*255) ));
private void createGUI()
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container window = getContentPane();
window.setLayout(new FlowLayout());
StudentDetailsTbl = new Hashtable();
StudentNameLbl = new JLabel("Student Name");
window.add(StudentNameLbl);
StudentNameTxt = new JTextField(15);
window.add(StudentNameTxt);
StudentMarkLbl = new JLabel("Student Mark");
window.add(StudentMarkLbl);
StudentMarkTxt = new JTextField(3);
window.add(StudentMarkTxt);
AddStudentDetailsBtn = new JButton("Add Student and Mark");
window.add(AddStudentDetailsBtn);
AddStudentDetailsBtn.addActionListener(this);
DeleteStudentDetailsBtn = new JButton("Delete Student");
window.add(DeleteStudentDetailsBtn);
DeleteStudentDetailsBtn.addActionListener(this);
DisplayAllStudentsBtn = new JButton("Display all Students and Marks");
window.add(DisplayAllStudentsBtn);
DisplayAllStudentsBtn.addActionListener(this);
SearchStudentBtn = new JButton("Search Student");
window.add(SearchStudentBtn);
SearchStudentBtn.addActionListener(this);
FailedStudentsBtn = new JButton("Students which Failed");
window.add(FailedStudentsBtn);
FailedStudentsBtn.addActionListener(this);
PassedStudentsBtn = new JButton("Students which Passed");
window.add(PassedStudentsBtn);
PassedStudentsBtn.addActionListener(this);
DistinctionStudentsBtn = new JButton("Students with Distinction");
window.add(DistinctionStudentsBtn);
DistinctionStudentsBtn.addActionListener(this);
ExitBtn = new JButton("Exit");
window.add(ExitBtn);
ExitBtn.addActionListener(this);
DisplayResultsTxt = new JTextArea();
DisplayResultsTxt.setPreferredSize(new Dimension(200, 200));
DisplayResultsTxt.setBackground(Color.white);
window.add(DisplayResultsTxt);
DisplayResultsTxt.enable(false);
public void actionPerformed (ActionEvent e)
if (e.getSource()== AddStudentDetailsBtn)
StudentName = StudentNameTxt.getText();
StudentMark = StudentMarkTxt.getText();
DisplayResultsTxt.setText("");
StudentDetailsTbl.put(StudentName, StudentMark);
Enumeration enumStudentName = StudentDetailsTbl.keys();
Enumeration enumStudentMark = StudentDetailsTbl.elements();
String[] keys = (String[]) StudentDetailsTbl.keySet().toArray(new String[0]);
Arrays.sort(keys);
for (String key : keys)
DisplayResultsTxt.append(key + " : " + StudentDetailsTbl.get(key)+ "\n");
StudentNameTxt.setText("");
StudentMarkTxt.setText("");
if (e.getSource() == DeleteStudentDetailsBtn )
if (StudentDetailsTbl.containsKey(StudentNameTxt.getText().trim()))
DisplayResultsTxt.setText("");
String txt = StudentNameTxt.getText();
Enumeration enumStudentName = StudentDetailsTbl.keys() ;
String currentelement = (String)enumStudentName.nextElement();
StudentDetailsTbl.remove(txt);
DisplayResultsTxt.append(txt + " has been deleted");
if (e.getSource() == SearchStudentBtn)
if (StudentDetailsTbl.containsKey(StudentNameTxt.getText().trim()))
String txt = StudentNameTxt.getText();
String result;
DisplayResultsTxt.setText("");
Enumeration enumStudentName = StudentDetailsTbl.keys();
Enumeration enumStudentMark = StudentDetailsTbl.elements();
while (enumStudentName.hasMoreElements())
String currentelement = (String)enumStudentName.nextElement();
result = (StudentDetailsTbl.get(currentelement).toString());
if (txt.equals(currentelement))
DisplayResultsTxt.append(currentelement + " " + result);
else JOptionPane.showMessageDialog(null, "Student Name could not be identified");
if (e.getSource() == DisplayAllStudentsBtn)
DisplayResultsTxt.setText("");
Enumeration enumStudentName = StudentDetailsTbl.keys();
Enumeration enumStudentMark = StudentDetailsTbl.elements();
while (enumStudentName.hasMoreElements())
DisplayResultsTxt.append(enumStudentName.nextElement()+ " " + enumStudentMark.nextElement()+ "\n");
if (e.getSource() == PassedStudentsBtn)
DisplayResultsTxt.setText("");
Enumeration enumStudentName = StudentDetailsTbl.keys();
Enumeration enumStudentMark = StudentDetailsTbl.elements();
while (enumStudentName.hasMoreElements())
int Mark = Integer.parseInt((String)enumStudentMark.nextElement());
String Name = (String)enumStudentName.nextElement();
if (Mark >=40)
DisplayResultsTxt.append(Name + " " + Mark + "\n");
if (e.getSource() == FailedStudentsBtn)
DisplayResultsTxt.setText("");
Enumeration enumStudentName = StudentDetailsTbl.keys();
Enumeration enumStudentMark = StudentDetailsTbl.elements();
while (enumStudentName.hasMoreElements())
int Mark = Integer.parseInt((String)enumStudentMark.nextElement());
String Name = (String)enumStudentName.nextElement();
if (Mark <40)
DisplayResultsTxt.append(Name + " " + Mark + "\n");
if (e.getSource() == DistinctionStudentsBtn)
DisplayResultsTxt.setText("");
Enumeration enumStudentName = StudentDetailsTbl.keys();
Enumeration enumStudentMark = StudentDetailsTbl.elements();
while (enumStudentName.hasMoreElements())
int Mark = Integer.parseInt((String)enumStudentMark.nextElement());
String Name = (String)enumStudentName.nextElement();
if (Mark >=75)
DisplayResultsTxt.append(Name + " " + Mark + "\n");
} -
Adding Components to a JPanel not working correctly
I'm trying to build a JFrame that contains a parent JPanel that will hold a JPanel used to display a message view, a vertical strut and a JPanel that holds VCR-like buttons to cycle through the messages.
My parent JPanel uses a BorderLayout and the Border is a TitledBorder which tells which product you are viewing (i.e., Message 1 of 5). I build the message JPanel, vertical strut and button JPanel and add them all in order to the parent JPanel which then gets added to the rootContentPane of the JFrame. All that appears is the parent JPanel's TitledBorder, the strut and the button JPanel. Using JSwat, I've been able to determine that the message JPanel has 0 for both its height and width after adding the message components to the JPanel.
I create the message JPanel with a BorderLayout and an OvalBorder as copied from Manning Press's Swing book (which works fine in other JFrames that I have built), then add other components as necessary to the individual messages (mostly items around the edges with a central display for the actual message). What I can't figure out is why the height and width of the message JPanel isn't growing as I add components.
I had previously used the same code to display a single message (minus the parent JPanel, strut and button JPanel) where I added the border panels (northPanel, eastPanel, southPanel and westPanel) created in createMsgPanel() directly to the contentPane and it worked perfectly, so I know that the code that adds the message works fine. Then, the requirements changed (go figure) and I had to display multiple messages from the same screen.
Here's what I've got:
public class Layout
extends JFrame
implements ActionListener
private MissionData missionData;
private JPanel messagePanel = null;
private int index = 0;
private int numMsgs = 0;
private JPanel mainPanel = null;
private JPanel buttonPanel = null;
private TitledBorder titledBorder = null;
Layout ()
public Layout (MissionData msn)
super ();
missionData = msn;
setSize (640, 640);
setIconImage (new ImageIcon ("Icon.jpg").getImage());
setTitle (((Message) (missionData.messages.elementAt(0))).name);
numMsgs = missionData.messages.size();
titledBorder = new TitledBorder (
new LineBorder (Color.BLACK),
"Message " + String.valueOf (index + 1) +
" of " + String.valueOf (numMsgs),
TitledBorder.LEFT,
TitledBorder.TOP);
mainPanel = new JPanel ();
mainPanel.setLayout (new BorderLayout());
mainPanel.setBorder (new CompoundBorder (titledBorder,
new EmptyBorder (
new Insets (3, 3, 3, 3))));
messagePanel = new JPanel();
messagePanel.setLayout (new BorderLayout ());
messagePanel.setBorder (new CompoundBorder (
new EmptyBorder (50, 50, 50, 50),
new OvalBorder (20, 20, Color.white)));
messagePanel.setBackground (Color.black);
createButtonPanel ();
createMsgPanel ((Message) missionData.messages.elementAt (0));
mainPanel.add (messagePanel);
mainPanel.add (Box.createVerticalStrut (20));
mainPanel.add (buttonPanel);
Container mainContentPane = getContentPane();
mainContentPane.add (mainPanel);
private void createMsgPanel (Message msg)
MessageType msgType = null;
if (msg.getFunctionalAreaDesignator(0) == Message.GENERAL_INFO)
if (msg.getMessageNumber(0) == 1)
msgType = FREE_TEXT;
else if (msg.getFunctionalAreaDesignator(0) == Message.SUPPORT)
if (msg.getMessageNumber(0) == 33)
msgType = CAS;
else if (msg.getMessageNumber(0) == 34)
msgType = OSR;
// Setup NORTH Panel of Display
JPanel northPanel = new JPanel (new GridLayout (2, 6));
northPanel.setBackground (Color.black);
northPanel.add (new JTIMLabel ("", false));
northPanel.add (new JTIMLabel ("<html>RECV</html>", false));
if (msgType == CAS)
northPanel.add (new JTIMLabel ("<html>PCLR</html>", false));
northPanel.add (new JTIMLabel ("<html>MSN</html>", false));
northPanel.add (new JTIMLabel ("<html>SAVE</html>", false));
else if (msgType == OSR)
northPanel.add (new JTIMLabel ("", false));
northPanel.add (new JTIMLabel ("", false));
northPanel.add (new JTIMLabel ("", false));
else if (msgType == FREE_TEXT)
northPanel.add (new JTIMLabel ("<html>ERASE</html>", false));
northPanel.add (new JTIMLabel ("", false));
northPanel.add (new JTIMLabel ("<html>BRDCST</html>", false));
northPanel.add (new JTIMLabel ("<html>SEND</html>", false));
northPanel.add (new JTIMLabel ("", false));
northPanel.add (new JTIMLabel ("", false));
if (msgType == CAS)
northPanel.add (new JTIMLabel ("<html>CAS</html>", false));
else if (msgType == OSR)
northPanel.add (new JTIMLabel ("<html>OSR</html>", false));
else if (msgType == FREE_TEXT)
northPanel.add (new JTIMLabel ("<html>FTXT</html>", false));
if (msgType == FREE_TEXT)
northPanel.add (new JTIMLabel ("", false));
northPanel.add (new JTIMLabel ("", false));
northPanel.add (new JTIMLabel ("", false));
northPanel.add (new JTIMLabel ("", false));
northPanel.add (new JTIMLabel ("", false));
else
northPanel.add (new JTIMLabel ("", false));
northPanel.add (new JTIMLabel ("<html>CAS</html>", false));
northPanel.add (new JTIMLabel ("", false));
northPanel.add (new JTIMLabel ("", false));
northPanel.add (new JTIMLabel ("", false));
messagePanel.add (northPanel, BorderLayout.NORTH);
// Setup EAST Box of Display
Box eastBox = new Box (BoxLayout.Y_AXIS);
if (msgType == CAS)
eastBox.add (Box.createGlue());
eastBox.add (new JTIMLabel ("<html>F<br>T<br>X<br>T</html>", false));
eastBox.add (Box.createGlue());
eastBox.add (new JTIMLabel ("<html>O<br>S<br>R</html>", false));
eastBox.add (Box.createGlue());
eastBox.add (new JTIMLabel ("<html>D<br>P<br>I<br>P</html>", false));
eastBox.add (Box.createGlue());
else if (msgType == FREE_TEXT)
eastBox.add (Box.createGlue());
eastBox.add (new JTIMLabel ("", false));
eastBox.add (Box.createGlue());
eastBox.add (new JTIMLabel ("", false));
eastBox.add (Box.createGlue());
eastBox.add (new JTIMLabel ("", false));
eastBox.add (Box.createGlue());
eastBox.add (new JTIMLabel ("", false));
eastBox.add (Box.createGlue());
eastBox.add (new JTIMLabel ("<html>W<br>L<br>C<br>O</html>", false));
eastBox.add (Box.createGlue());
eastBox.add (new JTIMLabel ("<html>C<br>N<br>T<br>C<br>O</html>",
false));
eastBox.add (Box.createGlue());
messagePanel.add (eastBox, BorderLayout.EAST);
// Setup SOUTH Panel of Display
JPanel southPanel = new JPanel (new GridLayout (2, 5));
southPanel.setBackground (Color.black);
southPanel.add (new JTIMLabel ("", false));
southPanel.add (new JTIMLabel ("", false));
southPanel.add (new JTIMLabel ("", false));
southPanel.add (new JTIMLabel ("", false));
southPanel.add (new JTIMLabel ("<html>ON</html>", false));
southPanel.add (new JTIMLabel ("", false));
southPanel.add (new JTIMLabel ("", false));
southPanel.add (new JTIMLabel ("", false));
if (msgType == CAS)
southPanel.add (new JTIMLabel ("<html>USE</html>", false));
southPanel.add (new JTIMLabel ("<html>RCALL</html>", false));
else if ((msgType == OSR) || (msgType == FREE_TEXT))
southPanel.add (new JTIMLabel ("", false));
southPanel.add (new JTIMLabel ("", false));
southPanel.add (new JTIMLabel ("<html>MENU</html>", false));
southPanel.add (new JTIMLabel ("<html>VMF</html>", false));
if (msgType == CAS)
southPanel.add (new JTIMLabel ("<html>NETS</html>", false));
else if ((msgType == OSR) || (msgType == FREE_TEXT))
southPanel.add (new JTIMLabel ("<html>CAS</html>", false));
southPanel.add (new JTIMLabel ("", false));
messagePanel.add (southPanel, BorderLayout.SOUTH);
// Setup WEST Box of Display
JTIMLabel incrLabel = null;
JTIMLabel decrLabel = null;
Box westBox = new Box (BoxLayout.Y_AXIS);
if (msgType == FREE_TEXT)
westBox.add (Box.createGlue());
westBox.add (new JTIMLabel ("", false));
westBox.add (Box.createGlue());
westBox.add (new JTIMLabel ("", false));
westBox.add (Box.createGlue());
westBox.add (new JTIMLabel ("", false));
westBox.add (Box.createGlue());
westBox.add (new JTIMLabel ("<html>N<br>E<br>X<br>T</html>", false));
westBox.add (Box.createGlue());
westBox.add (new JTIMLabel ("<html>P<br>R<br>E<br>V</html>", false));
else
westBox.add (Box.createGlue());
westBox.add (new JTIMLabel ("<html>U<br>F<br>C</html>", false));
westBox.add (Box.createGlue());
if (msgType == CAS)
westBox.add (new JTIMLabel ("<html>/\\</html>", false));
westBox.add (Box.createGlue());
westBox.add (new JTIMLabel ("<html>\\/</html>", false));
westBox.add (Box.createGlue());
incrLabel = new JTIMLabel ("<html>I<br>N<br>C<br>R</html>", false);
westBox.add (incrLabel);
westBox.add (Box.createGlue());
decrLabel = new JTIMLabel ("<html>D<br>E<br>C<br>R</html>", false);
westBox.add (decrLabel);
westBox.add (Box.createGlue());
messagePanel.add (westBox, BorderLayout.WEST);
// Create CENTER Box to display message bodies
GriddedPanel centerBox = new GriddedPanel ();
centerBox.setBackground (Color.black);
messagePanel.add (centerBox, BorderLayout.CENTER);
if (msgType == CAS)
new CASDisplay (msg, centerBox, incrLabel, decrLabel);
else if (msgType == OSR)
new OSRDisplay (msg, centerBox);
else if (msgType == FREE_TEXT)
new FreeTextDisplay (msg, centerBox);
private void createButtonPanel ()
// build the button panel
buttonPanel = new JPanel ();
buttonPanel.setLayout (new BoxLayout (buttonPanel, BoxLayout.X_AXIS));
buttonPanel.setBorder (new LineBorder (Color.BLACK));
// Create and add the buttons
buttonPanel.add (createButton ("FIRST_BUTTON"));
buttonPanel.add (createButton ("PREV_BUTTON"));
buttonPanel.add (createButton ("NEXT_BUTTON"));
buttonPanel.add (createButton ("LAST_BUTTON"));
private JButton createButton (String buttonName)
JButton button = new JButton ();
button.addActionListener (this);
button.setActionCommand (buttonName);
Image image = null;
String tooltip = "Press to go to the ";
if (buttonName.equals ("FIRST_BUTTON"))
image = new ImageIcon ("firstArrowIcon.gif").getImage();
tooltip += "First";
else if (buttonName.equals ("PREV_BUTTON"))
image = new ImageIcon ("previousArrowIcon.gif").getImage();
tooltip += "Previous";
else if (buttonName.equals ("NEXT_BUTTON"))
image = new ImageIcon ("nextArrowIcon.gif").getImage();
tooltip += "Next";
else if (buttonName.equals ("LAST_BUTTON"))
image = new ImageIcon ("lastArrowIcon.gif").getImage();
tooltip += "Last";
tooltip += " message in the lst";
button.setToolTipText (tooltip);
button.setIcon (new ImageIcon (image.getScaledInstance (36, 36, Image.SCALE_FAST)));
return button;
public void actionPerformed (ActionEvent e)
if (e.getActionCommand ().equals ("FIRST_BUTTON"))
index = 0;
else if (e.getActionCommand ().equals ("PREV_BUTTON"))
if (index > 0)
index--;
else if (e.getActionCommand ().equals ("NEXT_BUTTON"))
if (index < numMsgs - 1)
index++;
else if (e.getActionCommand ().equals ("LAST_BUTTON"))
index = numMsgs - 1;
titledBorder.setTitle ("Message " + String.valueOf (index + 1) +
" of " + String.valueOf (numMsgs));
createMsgPanel ((Message) missionData.messages.elementAt (index));
private static class MessageType
extends EnumeratedType
implements Serializable
final static long serialVersionUID = 1;
protected MessageType (int value, String desc)
super (value, desc);
private static MessageType FREE_TEXT =
new MessageType (0, "Free Text");
private static MessageType CAS =
new MessageType (1, "Call Accounting System");
private static MessageType OSR =
new MessageType (2, "Occupational Survey Report");
}That's all well and good, but I've had more times that not where
people want the entire program, not bits and pieces.Then you missed the whole point of that link.
We don't want to see bits and pieces of code. We want to see an executable program, but we want an executable program the demonstrates the incorrect behaviour without all the unnecessary code. 90% of the code you posted was not related to your problem. That is we what you do to some basic debugging and remove the parts of code that are not related to the problem so we can concentrate on the code that is related to the problem. -
HOW TO SHOW JLABEL IN JDIALOG WHILE MAIN CLASS IS SLEEPING? (CODE EDITED)
I have done a code below and it is working but the only problem is when the main program start to sleep by use Thread.sleep(10000) for 10 secs and it will prompt out a JDialog contain JLabel inside it with message "Please wait.... program is sleeping.". And when the thread ends the JDialog will auto disappear and it back to the main program.
I am using TimerTask to run the JDialog while the main class is sleeping.
The problem is:
When the JDialog appear, it doesn't show the component so I only be able to view the JDialog window without contain any component. I already use container to add the component into JDialog but it still doesn't show. I only be able to see the JDialog window contain empty component when the main window is sleeping.
How to make the components also appear in the JDialog when the main program is sleeping?
Below is the code pls have a try:
public class testThread extends JFrame
public static void main(String args[])
new testThread();
public testThread()
* other code not related is here
// WHEN USER PRESS startThreadBtn it will make the application sleep for 15 secs and pop out JDialog window contain JLabel msg wrote "Please wait... program is sleeping"
JButton startThreadBtn = new JButton("Start Thread");
startThreadBtn.addActionListener
( new ActionListener()
public void actionPerformed(ActionEvent e)
try{
doTask a = new doTask();
java.util.Timer thisTimer = new java.util.Timer();
thisTimer.schedule(a, 0); // when this code executed, will pop out a JDialog containing JLabel message --> refer to class doTask
Thread.sleep(10000);
a.terminate()
thisTimer.cancel();
catch(InterruptedException ie)
ie.printStackTrace();
public class doTask extends TimerTask
JDialog infoDialog;
public void run()
infoDialog = new JDialog(true);
infoDialog.setTitle("Please Wait!!!");
Container c = infoDialog.getContentPane();
c.setLayout(new BorderLayout());
JLabel infoLbl = new JLabel("Please Wait... Program is sleeping!!!", JLabel.CENTER);
c.add(infoLbl, BorderLayout.CENTER);
infoDialog.setVisible(true);
public void terminate()
infoDialog.setVisible(false);
infoDialog.dispose();
Why I can not show the JLabel inside the JDialog? The JDialog window is opened but it contain empty component.
PLEASE HELP ME .... THIS IS VERY URGENTI have the complete code and it is working. I can posted it here but it will be longer thats the reason why i shortened the code in here and displaying the important information.
The problem is the JDialog only will display the JLabel after the thread woke up. Thats mean it is too late for me to display the information. I need the JLabel containing the information to be displayed when the thread is sleeping....
Below is the complete code:
you can have a try to recompile it and u will understand what i mean. It is working and the only problem is JLabel component did not displayed in the JDialog.
Just copy the whole code into the txt file and save as testThread.java and recompile it. Inside the code has one inner class extends TimerTask call "doTask"
THE CODE START BELOW:
import java.util.*;
import java.lang.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class testThread extends JFrame
public static java.util.Timer thisTimer;
public static doTask a;
public static testThread tT;
public Container cMain;
public Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
public JButton exitBtn;
public JButton startThreadBtn;
/** Creates a new instance of testThread */
public static void main(String args[])
new testThread();
public testThread()
//System.out.println("Start to call JDialog");
tT = this;
int realW = (int)screenSize.getWidth();
int realH = (int)screenSize.getHeight();
int mainW = 500;
int mainH = 300;
exitBtn = new JButton("EXIT");
exitBtn.setBounds((int)((500-100)/2), (int)((300-50)/5), 100, 50);
exitBtn.addActionListener
new ActionListener()
public void actionPerformed(ActionEvent e)
System.exit(0);
startThreadBtn = new JButton("Start Thread");
startThreadBtn.setBounds((int)((500-200)/2), (int)((300-50)/5*4), 200, 50);
startThreadBtn.addActionListener
new ActionListener()
public void actionPerformed(ActionEvent e)
try
System.out.println("Start to call JDialog");
a = new doTask();
thisTimer = new java.util.Timer();
thisTimer.schedule(a, 0);
System.out.println("Thread start to sleep first 10 secs");
Thread.sleep(10000);
System.out.println("Thread start to sleep second 5 secs");
Thread.sleep(5000);
System.out.println("Thread Wake Up");
a.terminate();
thisTimer.cancel();
catch(InterruptedException ie)
ie.printStackTrace();
cMain = this.getContentPane();
cMain.setLayout(null);
cMain.add(exitBtn);
cMain.add(startThreadBtn);
setBounds((int)((realW-mainW)/2), (int)((realH-mainH)/2), mainW, mainH);
setVisible(true);
public class doTask extends TimerTask
JDialog infoDialog;
public void run()
System.out.println("TASK IS RUNNING");
int screenWidth = (int)screenSize.getWidth();
int screenHeight = (int)screenSize.getHeight();
int w = 300;
int h = 200;
infoDialog = new JDialog(tT, true);
infoDialog.setTitle("Please Wait!!!");
Container c = infoDialog.getContentPane();
c.setLayout(new BorderLayout());
JLabel infoLbl = new JLabel("Please Wait... Program is sleeping!!!", JLabel.CENTER);
c.add(infoLbl, BorderLayout.CENTER);
infoDialog.setBounds((int)((screenWidth-w)/2), (int)((screenHeight-h)/2), w, h);
infoDialog.setVisible(true);
public void terminate()
infoDialog.setVisible(false);
infoDialog.dispose();
this.cancel();
****************************************************************************************************************************************************************************************************************************************** -
Arranging objects on a JPanel (Not sure how to use Layouts)
Hey guys,
It was suggested to me to use layouts to arrange Jbuttons fields and such. I tryed following the Java tutorial on the topic but I can't seem to follow it. If someone might look at my code and give me some pointers to arrange it. I'm not too familiar with the arrangement of objects, and what I do know is from BlueJ. This is is my code. Thanks in advance.
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JTextArea;
public class SonnetTest {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setResizable(false);
//Creates a new PoemGenerator object
final PoemGenerator vanorden = new PoemGenerator();
//Sets the standard width of the fields
final int FIELD_WIDTH = 20;
//Initializes the input fields for author and title
final JTextField authorField = new JTextField(FIELD_WIDTH);
final JTextField titleField = new JTextField(FIELD_WIDTH);
//Labels the input fields
final JLabel titleLabel = new JLabel("Title");
final JLabel authorLabel = new JLabel("Author");
//Initializes the display area
final JTextArea display = new JTextArea();
display.setText(vanorden.verse);
display.setEditable (false);
//Initializes the submit and new poem buttons
JButton submitButton = new JButton("Submit");
JButton newPoemButton = new JButton("New Poem");
//Constructs the panel
JPanel panel = new JPanel();
panel.add(display);
panel.add(authorLabel);
panel.add(authorField);
panel.add(titleLabel);
panel.add(titleField);
panel.add(submitButton);
panel.add(newPoemButton);
frame.add(panel);
submitButton.setSize(5000,50);
//Creates a listener to be used when the submit button is pressed
class CheckAnswerListener implements ActionListener{
public void actionPerformed(ActionEvent event){
String authorGuess = authorField.getText();
//Compares the input with the correct (ignoring case)
if(authorGuess.compareToIgnoreCase(vanorden.Poet) == 0){
display.setText("Correct!");
else{
display.setText("Incorrect, the poet's name is " + vanorden.Poet + ".");
ActionListener listener = new CheckAnswerListener();
submitButton.addActionListener(listener);
//Creates a listener to be used when the new poem button is pressed
class NewPoemListener implements ActionListener{
public void actionPerformed(ActionEvent event){
PoemGenerator vanorden = new PoemGenerator();
display.setText(vanorden.verse);
ActionListener listener2 = new NewPoemListener();
newPoemButton.addActionListener(listener2);
//Sets the panel's size
frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
//Sets the variables to be used as dimensions for the window
private static final int FRAME_WIDTH = 500; //Good width for input fields
private static final int FRAME_HEIGHT = 100;
}Thank you. I put each of the components into its on panel, just for the sake of experimentation. The thing is though that only one panel shows up. How do I arrange them? I keep getting the error:
cannot find symbol method setLayout(java.awt.GridLayout)
Here is my revised code. Thanks for putting up with me.
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JTextArea;
public class SonnetTest {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setResizable(false);
//Creates a new PoemGenerator object
final PoemGenerator vanorden = new PoemGenerator();
//Sets the standard width of the fields
final int FIELD_WIDTH = 20;
//Initializes the input fields for author and title
final JTextField authorField = new JTextField(FIELD_WIDTH);
final JTextField titleField = new JTextField(FIELD_WIDTH);
//Labels the input fields
final JLabel titleLabel = new JLabel("Title");
final JLabel authorLabel = new JLabel("Author");
//Initializes the display area
final JTextArea display = new JTextArea();
display.setText(vanorden.verse);
display.setEditable (false);
//Initializes the submit and new poem buttons
JButton submitButton = new JButton("Submit");
JButton newPoemButton = new JButton("New Poem");
//Constructs the panel
JPanel panel = new JPanel();
panel.add(display);
JPanel panel2 = new JPanel();
panel2.add(authorLabel);
JPanel panel3 = new JPanel();
panel3.add(authorField);
JPanel panel4 = new JPanel();
panel4.add(titleLabel);
JPanel panel5 = new JPanel();
panel5.add(titleField);
JPanel panel6 = new JPanel();
panel6.add(submitButton);
JPanel panel7 = new JPanel();
panel7.add(newPoemButton);
frame.add(panel);
frame.add(panel2);
frame.add(panel3);
frame.add(panel4);
frame.add(panel5);
frame.add(panel6);
frame.add(panel7);
submitButton.setSize(5000,50);
//Creates a listener to be used when the submit button is pressed
class CheckAnswerListener implements ActionListener{
public void actionPerformed(ActionEvent event){
String authorGuess = authorField.getText();
//Compares the input with the correct (ignoring case)
if(authorGuess.compareToIgnoreCase(vanorden.Poet) == 0){
display.setText("Correct!");
else{
display.setText("Incorrect, the poet's name is " + vanorden.Poet + ".");
ActionListener listener = new CheckAnswerListener();
submitButton.addActionListener(listener);
//Creates a listener to be used when the new poem button is pressed
class NewPoemListener implements ActionListener{
public void actionPerformed(ActionEvent event){
PoemGenerator vanorden = new PoemGenerator();
display.setText(vanorden.verse);
ActionListener listener2 = new NewPoemListener();
newPoemButton.addActionListener(listener2);
//Sets the panel's size
frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
//Sets the variables to be used as dimensions for the window
private static final int FRAME_WIDTH = 260; //Good width for input fields
private static final int FRAME_HEIGHT = 200;
} -
Need help in Simple Java JDialog...
have 3 classes..
One class extend JFrame
One class extend JPanel
One class extend JDialog
My JFrame is like my Main Frame...
I have my JPanel that is always changing in my JFrame..
How do i pass the JFrame into my JDialog constructor???
(btw, is upon one of my JPanel click button, my JDialog appears)
Thanks.have 3 classes..
One class extend JFrame
One class extend JPanel
One class extend JDialog
My JFrame is like my Main Frame...
I have my JPanel that is always changing in my
JFrame..
How do i pass the JFrame into my JDialog
constructor???
(btw, is upon one of my JPanel click button, my
JDialog appears)
Thanks.You can pass the reference of JFrame in JDialog constructor as below:
1) JDialog dialog = new JDialog(ClassName.this, "Title', true);
where ClassName is the name of class that extends the JFrame. Thus you can capture reference of the parent.
2) You can also get reference of JFrame by invoking method on your panel as:
Container parent = jPanel.getParent();
JDialog dialog = new JDialog(parent , "Title', true);
where jPanel is instance of your JPanel.
Post whether u need anything else.
Maybe you are looking for
-
HELP! No longer able to capture HDV in FCP 6
I had a seamless FCP workflow using my Canon XH-A1 and FCP 6. I always connect my camera and power it up first before starting FCP. My settings were perfect, then about a week and a half ago FCP would no longer capture HDV from the camera. I tried re
-
In Address Book, how can i modify several contacts (several cards) at the s
Hello, In Address Book, how can i modify several contacts (several cards) at the same time ? for exemple : I have 100 contact which live in Paris, I select all of them together, but when I put "Paris" in the field "city", it puts "Paris" only in the
-
I lost my redemption code to install Lion onto my new computer. Is there a way I could get it again? When I go to the "get the update" page, it says that my serial number already has a code. How do I find this code again?!
-
This trial offer is a long one.
-
AS ABAP System not visible on SLD
Hi Gurus, We have newly installed a CRM 2007 system (QA) and completed most of the post install activities. We have the requirement of connecting an XI system to the CRM system, and we are trying to configure the SLD. Here we are facing a wierd error