|
Hi all,
I am writing a small 2D platform game and currently working on EventListeners. When the user clicks the 'blackSquare' JButton it is removed from the screen and placed within a different JPanel (the inventory). However once this event has occoured the player sprite no longer responds to the user input, can anyone help.
package com.brackeen.javagamebook.input;
import com.brackeen.javagamebook.graphics.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.EtchedBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class InvItems extends MenuScreen implements ActionListener
{
public static void main(String[] args)
{
new InvItems().run();
}
private JPanel panelZero;
private JPanel panelOne;
private JPanel panelTwo;
private JPanel panelThree;
private JPanel panelFour;
private JPanel panelFive;
private JButton quitButton;
private JButton blackSquare;
private JTextArea textArea;
private JLabel inventoryLabel;
private JList dropDown;
String [] items ={"Take", "Examine"};
String textOne = ("Text Area");
String textTwo = ("Its Just a black square");
public void init()
{
super.init();
NullRepaintManager.install();
inventoryLabel = new JLabel("Inventory");
dropDown = new JList(items);
panelZero = new JPanel();
panelOne = new JPanel();
panelTwo = new JPanel();
panelThree = new JPanel();
panelFour = new JPanel();
panelFive = new JPanel();
inventoryLabel.setFont(new Font("Blackadder ITC", Font.ITALIC, 16));
inventoryLabel.setForeground(Color.RED);
textArea = new JTextArea();
textArea.setText(textOne);
textArea.setFont(new Font("Blackadder ITC", Font.ITALIC, 16));
textArea.setBackground(new Color(0, 0, 0, 0));
textArea.setForeground(Color.RED);
panelFive.setBackground(new Color(0, 0, 0, 0));
quitButton = createButton("quit", "Quit");
quitButton.setBounds(50, 50, 64, 64);
quitButton.setVisible(true);
blackSquare = createButton("test", "Test");
blackSquare.setVisible(true);
JFrame frame = super.screen.getFullScreenWindow();
Container contentPane = frame.getContentPane();
Cursor cursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
frame.setCursor(cursor);
if (contentPane instanceof JComponent)
{
((JComponent)contentPane).setOpaque(false);
}
contentPane.setLayout(null);
panelZero.setBounds(0, 0, 75, 75);
panelOne.setOpaque(true);
panelOne.setBounds(300, 10, 150, 30);
panelOne.setOpaque(false);
panelTwo.setBounds(190, 35, 378, 75);
panelTwo.setOpaque(false);
panelThree.setBounds(300, 200, 100, 100);
panelThree.setOpaque(false);
panelThree.setVisible(true);
panelFour.setBounds(400, 200, 100, 100);
panelFour.setOpaque(false);
panelFour.setVisible(false);
panelFive.setBounds(10, 550, 775, 40);
panelFive.setOpaque(true);
panelFive.setVisible(true);
panelFive.setBorder(new EtchedBorder());
panelZero.add(quitButton);
panelOne.add(inventoryLabel);
panelThree.add(blackSquare);
panelFour.add(dropDown);
panelFive.add(textArea);
contentPane.add(panelZero);
contentPane.add(panelOne);
contentPane.add(panelTwo);
contentPane.add(panelThree);
contentPane.add(panelFour);
contentPane.add(panelFive);
frame.validate();
blackSquare.addMouseListener(new MouseWatcher());
dropDown.addMouseListener(new MouseWatcher());
}
public class MouseWatcher extends JFrame implements MouseListener
{
public synchronized void mouseClicked(MouseEvent e)
{
panelFour.setVisible(true);
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseReleased(MouseEvent e)
{
}
public synchronized void mousePressed(MouseEvent e)
{
if (dropDown.getSelectedIndex() == 0)
{
panelThree.setVisible(false);
panelTwo.add(blackSquare);
panelFour.setVisible(false);
}
else if (dropDown.getSelectedIndex() == 1)
{
textArea.setText(textTwo);
}
}
public void mouseExited(MouseEvent e)
{
}
}
public void actionPerformed(ActionEvent e)
{
Object src = e.getSource();
if (src == quitButton)
{
super.exit.tap();
}
}
public void draw(Graphics2D g)
{
super.draw(g);
JFrame frame = super.screen.getFullScreenWindow();
frame.getLayeredPane().paintComponents(g);
}
}
|
|
|
|
|
- don't use syncronized in Mousewatcher. You're not using Thread.
- dont let MouseWatcher extend JFrame (why does it do so? there should be no need to extend JFrame)
- do not override mouseEntered() , mouseReleased() and mouseExited() until you really need to modify them.
regards
Torsten
I never finish anyth...
|
|
|
|
|
Thanks Torsten,
Iv ammend my code as you said but to no availe. I think my problem lies within the event itsself. E.g when the black button is clicked a Jlist bocomes available, when the 'Take' index of the JList array is selected the black button is removed from the JPanel showing it on the screen and placed in a JPanel showing it in the inventory. I now beleive the event is still waiting for something else to happen when it should pass control back to the arrow keys so the user can move the player sprite again but i am unsure of how to do this.
Kurt
|
|
|
|
|
|
I am looking for any html parser, that could output xml from inputstream(IMDB search results) or just parsed code into structures with filter tags. I tryed with HTMLCleaner but it doesn't supports imdb site. I get this error
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL: http:
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1436)
at java.net.URL.openStream(URL.java:1010)
at org.htmlcleaner.Utils.getCharsetFromContent(Utils.java:121)
at org.htmlcleaner.HtmlCleaner.clean(HtmlCleaner.java:299)
at org.htmlcleaner.HtmlCleaner.clean(HtmlCleaner.java:317)
at Main.main(Main.java:25)
I also tryed HTMLParser([^]), but i can't get correct data with it.
If anyone has experience with parsing IMDB html code i would be really thankful for any kind of help.
Thanks
|
|
|
|
|
Since you haven't shown any code helping you seems futile, but I'm sure you have checked the meaning of HTTP return code of 403:
http://en.wikipedia.org/wiki/HTTP_403[^].
Just a well meant hint.
Cheers!
|
|
|
|
|
Hi,
403 means "forbidden", which could be many things, however it is decided by the server, and the net result is you aren't getting any data. So it is not the parsing that is at fault, it is the way you ask for the web page.
I tried http://www.imdb.com with my existing C# program and it loads fine; one thing I remember very well doing after some sporadic failures, is provide a realistic "useragent", which is a string explaining what the client's characteristics/capabilities are. I use
"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.19) Gecko/2010031422 Firefox/3.0.17"
which was what FireFox emitted at that time.
I suggest you figure out where and how to specify such useragent in your code.
Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.
|
|
|
|
|
The code is like this:
CleanerProperties props = new CleanerProperties();
HtmlCleaner test=new HtmlCleaner();
test.clean(new URL("http://www.imdb.com/find?s=all&q=burek"));
In c# i have no problems too. But in java there i have errors, which i specified.
Any other parser, that would be useful for IMDB?
Thanks
|
|
|
|
|
My C# code doesn't work for that URL, i.e. it seems to return only half a HTML header and no body; there is a link tag though.
My FF browser works, however its "view page source" shows exactly the same stuff my C# app does. I'm puzzled by the link tag.
<link rel="canonical" href="http://www.imdb.com/find?s=all&q=burek" />
the "canonical" value is unknown in here[^]!!!
There are google hits about it though...
Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.
|
|
|
|
|
I used another way of parsing it.. xml serialization with imdb doesn't work.. so i am doing it with TagNodes that HtmlParsers supports and its quite easy! Maybe you know how to replace this spec char which i am getting
""" because with replace it doesn't work?!
Thanks
modified on Monday, March 14, 2011 11:42 PM
|
|
|
|
|
I would hazard a guess that the 403 Forbidden error is the result of IMDB not allowing their web interfaces to be used as a web service (querying for data directly without viewing the content on their site, including the all-important advertising ).
They likely accomplish this with a bizarre browser behaviour trick, as Luc and yourself seem to have seen with the strange canonical link tag.
You may want to look into if IMDB hosts a query interface for applications, but if they do, it's likely a premium service (AKA a paid service).
Cheers!
|
|
|
|
|
Say i have 3 buttons, im wondering if there is any way i can say:
if the previous button pressed was btn2, when btn3 is pressed after it does btn 3 will carry out function1.
else if, the previous button pressed was btn1, when btn3 is pressed after it btn 3 will carry out function2.
Hopefully this makes some sense.
|
|
|
|
|
so have a class member that remembers which button was pressed most recently and have btn3 act accordingly.
Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.
|
|
|
|
|
An alternative would be to have btn1 and btn2 set the action command on btn3. So when you click btn1, it calls btn3.setActionCommand("function1"), when you click btn2 it calls btn3.setActionCommand("function2"). Then in the action listener for btn3, you can get the action command from the event and that will tell you what to do.
|
|
|
|
|
hmm, that sounds evil. Modifying ActionCommand is one thing that makes you burn in hell and write VB for eternity.
regards
Torsten
I never finish anyth...
|
|
|
|
|
int a[][] = { {1,2},
{2,3}};
this is how we can initialize an 2d array at the time of its deceleration but i don't know how to initialize an 3d array in java at the time of its deceleration.
Please help me friends..
|
|
|
|
|
an N-dimensional array is like a one-dimensional array where each element is an N-1 dimensional array.
It gets initialized by providing initialization for all its elements, comma-separated and within curly brackets.
You figured it out for 2D, now do the same for 3D.
Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.
|
|
|
|
|
int a[][][] = { { {1,1}, {1,2} }, { {2,1}, {2,2} } };
...Perhaps a simple rule is the number of dimensions is equal to the number of opening curly braces at the start.
Another point, are you sure you want a 3D array? what data are you storing?
I may or may not be responsible for my own actions
|
|
|
|
|
I am running my application through a batch file,but it is always returning system.exit() equals to 0,even if when it is encountering an error.What should i do to get non zero status code.
thanks in advance.
|
|
|
|
|
I have tried this on my system and the error value is successfully returned. Can you post some of your code and maybe we can assist.
I must get a clever new signature for 2011.
|
|
|
|
|
Because you are not calling System.exit(int).
|
|
|
|
|
Hi, I have define the following class in my practice.
package array;
public class Student {
private int studentId= 0;
private String name;
private String family;
public Student(int _studentId, String _name, String _family){
studentId= _studentId;
name= _name;
family= _family;
}
public int getStudentId(){
return studentId;
}
public void setStudentId(int newStudentId){
studentId= newStudentId;
}
public String getName(){
return name;
}
public void setName(String newName){
name= newName;
}
public String getFamily(){
return family;
}
public void setFamily(String newFamily){
family= newFamily;
}
}
then in main class I have these code
package array;
import java.io.*;
import array.Student;
public class Main {
public static void main(String[] args) {
Student[] st = new Student[3];
st[0]= new Student(3400,"XXX", "YYY");
st[1]= new Student(3800, "ZZZ", "WWW");
st[2]= new Student(4200,"RRR", "MMM");
System.out.println(st[1]);
System.out.println("\n");
}
}
the problem is after I run the program nothing print out on the screen. is there problem in code??
|
|
|
|
|
st[1] is object of type Student, not a String. You should have toString() method within your Student class
public String toString()
{
return "Name: " + name + ", " + family + " ID:" + studentId + "
}
Than use simply use
System.out.println(st[1].toString());
It will start printing the student information.
|
|
|
|
|
Shivamkalra wrote: st[1] is object of type Student, not a String
Which wouldn't stop it from using the default toString() method which would print something.
|
|
|
|
|
perfect answer!
@ future3839
just a short note: your code looks really good, clean and well structured. One small point I noticed is the package declaration: package array; . It would be more appropriate to use a longer declaration like package au.future3839.school.arrays; . this would define your package clearly as your package, otherwise you could get into trouble when having a lucky hit on a predefined package.
regards
Torsten
I never finish anyth...
|
|
|
|
|