I am try to pass txtSearch as an JTextField object from testUserInterface class to testSearch class.
However, I got an error saying
I wonder that something is wrong with my code,
line 29 in testSearch shows problem with public testSearch()
line 168 in testUserInterface shows problem with ts = new testSearch();
below are what I have changed
I added a method:
in testUserInterface class
then I call the method getSearchBox()
in testSearch class
Finally, I got error with StackOverflow
How can I fix this error ??? please help me sorting out the problem
Thanks a lot for your help
Kind Regards
However, I got an error saying
java.lang.StackOverflowError
at java.awt.Insets.<init>(Insets.java:103)
at sun.awt.windows.WToolkit.getScreenInsets(Native Method)
at sun.awt.windows.WToolkit.getScreenInsets(WToolkit.java:567)
at java.awt.window.init(window.java:498)
at java.awt.window.<init>(window.java:536)
at java.awt.Frame.<init>(Frame.java:420)
at java.awt.Frame.<init>(Frame.java:385)
at javax.swing.JFrame.<init>(JFrame.java:180)
at testUserInterface.<init>(testUserInterface.java:65)
at testSearch.<init>(testSearch.java:29)
at testUserInterface.<init>(testUserInterface.java:168)
I wonder that something is wrong with my code,
line 29 in testSearch shows problem with public testSearch()
line 168 in testUserInterface shows problem with ts = new testSearch();
below are what I have changed
I added a method:
public JTextField getSearchBox()
{
return txtSearch;
}in testUserInterface class
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JMenuBar;
import javax.swing.KeyStroke;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import java.util.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;
import com.aetrion.flickr.*; // For FlickrJ classes.
import com.aetrion.flickr.photos.*;
import java.io.*; //for writing and reading file
public class testUserInterface extends JFrame implements ActionListener
{
/**
* @param Declaring all components for user interface
* @param Firslty, to declare components of menu such as
* @param JMenuBar to create a menu bar
* @param JMenu to create a menu on the menu bar such as menu File.
* @param JMenuItem to create a submenu of the menu such as fExit is a submenu of menu File.
*/
private JMenuBar menuBar;
private JMenu file, menu, help;
private JMenuItem fExit, mUpload, mRecentPhoto, mSearch, hGuide, hAuthor;
private JPanel upperPanel, centerPanel, InforPanel,imgPanel, recentPhotoPanel;
public JPanel searchPhotoPanel;
private JLabel welcome, lWelcome, lAbout, recentPhotoTitle, searchTitle;
ImageIcon iWelcome = new ImageIcon("IMAGE/flickr.jpg", "Flickr Image");
ImageIcon iAbout = new ImageIcon("IMAGE/FairyTail.jpg", "Fairy Tail Team");
* @param this to declare all components that should be in Search Panel
* @param JButton btnStart, btnExit.
* @param JLabel lblSearch
* @param JTextField txtSearch
*/
private JButton btnStart, btnExit;
private JLabel lblSearch;
private JTextField txtSearch;
private JPanel sContent;
private testSearch ts;
public testUserInterface ()
{
//Add regular components to the window, using the default BorderLayout.
Container contentPane = getContentPane(); //the app window
// create upper panel to hold menu bar on the top of interface
upperPanel = new JPanel();
contentPane.add(upperPanel, BorderLayout.NORTH);
upperPanel.setLayout(new BorderLayout());
// Create menu bar to hold menus and submenus
menuBar = new JMenuBar();
//add menu bar to the top of interface
upperPanel.add(menuBar);
// Build File menu and its short-cut key
file = new JMenu ("File");
file.setMnemonic(KeyEvent.VK_F);
file.getAccessibleContext().setAccessibleDescription(
"File related operations");
// Create a submenu for File menu and ist short-cut key
fExit = new JMenuItem ("Exit", KeyEvent.VK_E);
fExit.addActionListener(this);
// add components of File menu
menuBar.add(file);
file.add(fExit);
// Build Menu menu and its short-cut key
menu = new JMenu ("Menu");
menu.setMnemonic(KeyEvent.VK_M);
menu.getAccessibleContext().setAccessibleDescription(
"Menu related operations");
// Create submenus for Menu menu and its short-cut key
mRecentPhoto = new JMenuItem ("Check Recent Photos", KeyEvent.VK_C);
mSearch = new JMenuItem ("Search Photos", KeyEvent.VK_S);
// add components of File menu
menuBar.add(menu);
menu.add(mRecentPhoto);
mRecentPhoto.addActionListener(this);
menu.addSeparator();
menu.add(mSearch);
mSearch.addActionListener(this);
// Build Help Menu and its short-cut key
help = new JMenu ("Help");
help.setMnemonic(KeyEvent.VK_H);
help.getAccessibleContext().setAccessibleDescription(
"Help related operations");
// Create submenus for Help Menu and their short-cut key
hGuide = new JMenuItem ("Short-Cut Key Guide", KeyEvent.VK_S);
hAuthor = new JMenuItem ("About Us", KeyEvent.VK_A);
// add components of help menu
menuBar.add(help);
help.add(hGuide);
hGuide.addActionListener(this);
help.addSeparator();
help.add(hAuthor);
hAuthor.addActionListener(this);
// Build Center Panel which is stayed in the center of interface.
centerPanel = new JPanel();
centerPanel.setLayout (new FlowLayout());
contentPane.add(centerPanel, BorderLayout.CENTER);
// Build Infor Panel and display Image and Text.
InforPanel = new JPanel();
InforPanel.setLayout (new BorderLayout());
centerPanel.add(InforPanel);
// Build components for Infor Panel
welcome = new JLabel ("Welcome to Java Flickr Application", JLabel.CENTER);
InforPanel.add(welcome, BorderLayout.NORTH );
lWelcome = new JLabel (iWelcome);
InforPanel.add(lWelcome);
//Build recent Photo Panel to display most recent photos
recentPhotoPanel = new JPanel();
recentPhotoPanel.setLayout (new BorderLayout());
recentPhotoPanel.setVisible(false);
recentPhotoTitle = new JLabel ("Most Recent Photos on Flickr");
recentPhotoPanel.add(recentPhotoTitle);
centerPanel.add(recentPhotoPanel);
//Build Search Panel to display area where user can search photos with a keyword
searchPhotoPanel = new JPanel ();
searchPhotoPanel.setLayout (new BorderLayout());
searchPhotoPanel.setVisible(false);
searchTitle = new JLabel ("Welcome to Search Area", JLabel.CENTER);
searchPhotoPanel.add(searchTitle, BorderLayout.NORTH);
centerPanel.add(searchPhotoPanel);
/**
* @param code below to build all components that should be in Search Panel
* @param adding all components and display them in Search Panel
* @param Handling events when user clicks on button Search
* @param JTextField txtSearch
*/
// Build Components for Search
sContent = new JPanel(); // content Panel to display
sContent.setLayout( new FlowLayout());
lblSearch = new JLabel("Search");
txtSearch = new JTextField(20);
btnStart = new JButton("Start");
btnExit = new JButton("Exit");
ts = new testSearch();
// add action handling for 2 buttons
btnStart.addActionListener(ts);
btnExit.addActionListener(ts);
//Add components to Search Panel and action handling
sContent.add(lblSearch);
sContent.add(txtSearch);
sContent.add(btnStart);
sContent.add(btnExit);
searchPhotoPanel.add(sContent, BorderLayout.CENTER);
// End Search components
}
public static void main(String[] args)
{
testUserInterface test = new testUserInterface ();
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
test.setTitle("Java Flickr Application");
test.setSize(800,600);
test.setVisible(true);
}
public JTextField getSearchBox()
{
return txtSearch;
}
public void actionPerformed(ActionEvent e)
{
if (e.getSource() instanceof JMenuItem)
{
JMenuItem source = (JMenuItem)(e.getSource());
//If user selects "Short-cut Key Guide" sub-menu, a dialog will be shown
if (source.equals(hGuide))
{
JOptionPane.showMessageDialog( testUserInterface.this,
"Select appropriate menu option that you want from Java Flickr Application\n" +
"User should navigate to menu before submenu\n" +
"Alt + F => select File menu \n" +
"Alt + E => select Exit submenu \n" +
"Alt + M => select Menu menu \n" +
"Alt + C => select Check Recent Photos submenu \n" +
"Alt + S => select Search submenu \n" +
"Alt + H => select Help menu \n" +
"Alt + S => select Short-cut Key Guide submenu \n" +
"Alt + A => select About Us submenu \n" ,
"Help Contents", JOptionPane.PLAIN_MESSAGE);
}
//If user selects "About Us" sub-menu, a dialog will be shown
if (source.equals(hAuthor))
{
JOptionPane.showMessageDialog( testUserInterface.this,
"Java Flickr Application is created by Fairy Tail Group \n\n" +
"Hung Vu Pham\n\n" +
"Jennifer Naiaretti\n\n" +
"Panagiota Tzana\n\n" +
"Athina Ioannou",
"About Us", JOptionPane.PLAIN_MESSAGE, iAbout);
}
//If user selects "Check Recent Photos" sub-menu, a panel to retrieve all photos from Flickr and display photos
if (source.equals(mRecentPhoto))
{
InforPanel.setVisible(false);
searchPhotoPanel.setVisible(false);
recentPhotoPanel.setVisible(true);
}
//If user selects "Search Photos" sub-menu, a panel to help user search photos on Flickr with specific keyword
//This panel also contains all photo after searching.
if (source.equals(mSearch))
{
InforPanel.setVisible(false);
recentPhotoPanel.setVisible(false);
searchPhotoPanel.setVisible(true);
}
//If "Exit" sub-menu is selected, a window closes.
if (source.equals(fExit))
{
dispose();
System.exit(0);
}
}
}
}
then I call the method getSearchBox()
public testSearch()
{
getSearchBox();
}in testSearch class
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;
import javax.swing.*;
import com.aetrion.flickr.*; // For FlickrJ classes.
import com.aetrion.flickr.photos.*;
public class testSearch extends testUserInterface implements ActionListener{
private PhotoPanel pp;
private String keyWord;
private String photoUrl;
private PhotoFinder pf;
private Timer timer;
private ArrayList<Photo> photoList;
private String originalKeyWord, oldKeyWord;
/**
* Creates new form SearchInterface
*/
public testSearch()
{
getSearchBox();
}
public void init()
{
pp = new PhotoPanel();
pp.setLayout(new FlowLayout());
searchPhotoPanel.add(pp, BorderLayout.SOUTH);
pp.setVisible(true);
pf = new PhotoFinder();
photoList = new ArrayList<Photo>();
originalKeyWord = "";
oldKeyWord = "";
//titles = new ArrayList<String>();
timer = new Timer(1000, this);
//btnStart = new JButton("Search");
pack();
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand().equals("Exit"))
{
System.exit(0);
}
if (e.getActionCommand().equals("btnStart"))
{
if (timer.isRunning())
{
timer.stop();
}
keyWord = getSearchBox().getText();
originalKeyWord = keyWord;
oldKeyWord = keyWord;
timer.start();
}
else
{
if (keyWord != null)
{
Random r = new Random();
photoList.clear();
photoList = pf.doQuery(keyWord);
int i = r.nextInt(photoList.size());
pp.setImage(photoList.get(i).getSmallUrl());
keyWord = photoList.get(i).getTitle();
Iterator it = photoList.iterator();
while (keyWord.equals(""))
{
Photo p = (Photo)it.next();
keyWord = p.getTitle();
}
// if (oldKeyWord.equals(keyWord))
//{
// keyWord = originalKeyWord;
// }
//oldKeyWord = keyWord;
keyWord = originalKeyWord;
{
//int num = photoList.size();
//for (int k=1; k< num; k++)
pp.repaint();
}
System.out.println(keyWord);
}
}
}
}
Finally, I got error with StackOverflow
How can I fix this error ??? please help me sorting out the problem
Thanks a lot for your help
Kind Regards