Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about programming within the scope defined in the help center.
Closed 1 year ago.
Improve this question
i'm currently adding functionality and completing a Hang-Man game my programing teacher made.
The following error message: Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: index 0, length 0 with the index changing for everyindex in a String builder. is appearing everytime i input a letter that is correctly guessed in the game.
I have tried for a while to fix it but i have yet to be able to.
package hangManSo;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Arrays;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class HangManSO extends JPanel implements ActionListener, MouseListener {
private int error;
JButton button;
JTextField field;
JFrame frame;
JLabel rättord;
HangManSO(JButton button, JTextField field, JFrame frame, JLabel rättord) {
this.button = button;
this.field = field;
this.frame = frame;
this.rättord = rättord;
this.addMouseListener(this);
}
static String [] ord = {"rome"};
static Random r = new Random();
static int randomNumber=r.nextInt(ord.length);
static String d = ord[randomNumber];
StringBuilder builder = new StringBuilder(d.length());
StringBuilder builderDisplay = new StringBuilder();
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
String guessedletter = field.getText();
if (source.equals(button)) {
if (!d.contains(guessedletter)) {
error++;
frame.repaint();
}
if (d.contains(guessedletter)) {
char [] randomWord = d.toCharArray();
char CharGuessedLetter = guessedletter.charAt(0);
//gets the index of the guessed letter in the randomword
builder.append(randomWord);
int index = builder.indexOf(String.valueOf(CharGuessedLetter));
//is supposed to set the correctly guessed letter in the correct index
builderDisplay.setCharAt(index, CharGuessedLetter);
rättord.setText(builderDisplay.toString());
}
field.setText("");
}
}
public void paintComponent(Graphics g ) {
super.paintComponent(g);
if (error == 1)
g.drawLine(10, 270, 500, 270);
if (error == 2) {
g.drawLine(10, 270, 500, 270);
g.drawLine(200, 30, 200, 270);
}
if (error == 3) {
g.drawLine(10, 270, 500, 270);
g.drawLine(200, 30, 200, 270);
g.drawLine(200, 30, 350, 30);
}
if (error == 4) {
g.drawLine(10, 270, 500, 270);
g.drawLine(200, 30, 200, 270);
g.drawLine(200, 30, 350, 30);
g.drawLine(200, 30, 350, 30);
g.drawLine(250, 30, 200, 75);
}
if (error == 5) {
g.drawLine(10, 270, 500, 270);
g.drawLine(200, 30, 200, 270);
g.drawLine(200, 30, 350, 30);
g.drawLine(200, 30, 350, 30);
g.drawLine(250, 30, 200, 75);
g.drawLine(350, 30, 350,100);
}
if (error == 6) {
g.drawLine(10, 270, 500, 270);
g.drawLine(200, 30, 200, 270);
g.drawLine(200, 30, 350, 30);
g.drawLine(200, 30, 350, 30);
g.drawLine(250, 30, 200, 75);
g.drawLine(350, 30, 350,100);
g.drawOval(330, 100, 40, 40);
}
if (error == 7) {
g.drawLine(10, 270, 500, 270);
g.drawLine(200, 30, 200, 270);
g.drawLine(200, 30, 350, 30);
g.drawLine(200, 30, 350, 30);
g.drawLine(250, 30, 200, 75);
g.drawLine(350, 30, 350,100);
g.drawOval(330, 100, 40, 40);
g.drawLine(350, 140, 350,200);
}
if (error == 8) {
g.drawLine(10, 270, 500, 270);
g.drawLine(200, 30, 200, 270);
g.drawLine(200, 30, 350, 30);
g.drawLine(200, 30, 350, 30);
g.drawLine(250, 30, 200, 75);
g.drawLine(350, 30, 350,100);
g.drawOval(330, 100, 40, 40);
g.drawLine(350, 140, 350,200);
g.drawLine(350, 200,390, 240);
}
if (error == 9) {
g.drawLine(10, 270, 500, 270);
g.drawLine(200, 30, 200, 270);
g.drawLine(200, 30, 350, 30);
g.drawLine(200, 30, 350, 30);
g.drawLine(250, 30, 200, 75);
g.drawLine(350, 30, 350,100);
g.drawOval(330, 100, 40, 40);
g.drawLine(350, 140, 350,200);
g.drawLine(350, 200,390, 240);
g.drawLine(350, 200, 310, 240);
}
if (error == 9) {
g.drawLine(10, 270, 500, 270);
g.drawLine(200, 30, 200, 270);
g.drawLine(200, 30, 350, 30);
g.drawLine(200, 30, 350, 30);
g.drawLine(250, 30, 200, 75);
g.drawLine(350, 30, 350,100);
g.drawOval(330, 100, 40, 40);
g.drawLine(350, 140, 350,200);
g.drawLine(350, 200,390, 240);
g.drawLine(350, 200, 310, 240);
}
if (error == 10) {
g.drawLine(10, 270, 500, 270);
g.drawLine(200, 30, 200, 270);
g.drawLine(200, 30, 350, 30);
g.drawLine(200, 30, 350, 30);
g.drawLine(250, 30, 200, 75);
g.drawLine(350, 30, 350,100);
g.drawOval(330, 100, 40, 40);
g.drawLine(350, 140, 350,200);
g.drawLine(350, 200,390, 240);
g.drawLine(350, 200, 310, 240);
g.drawLine(350, 170, 400, 150);
}
if (error == 11) {
g.drawLine(10, 270, 500, 270);
g.drawLine(200, 30, 200, 270);
g.drawLine(200, 30, 350, 30);
g.drawLine(200, 30, 350, 30);
g.drawLine(250, 30, 200, 75);
g.drawLine(350, 30, 350,100);
g.drawOval(330, 100, 40, 40);
g.drawLine(350, 140, 350,200);
g.drawLine(350, 200,390, 240);
g.drawLine(350, 200, 310, 240);
g.drawLine(350, 170, 400, 150);
g.drawLine(350, 170, 300, 150);
}
if(error > 11) {
g.setFont(new Font("Calibri", Font.BOLD, 26));
g.drawString("GAME OVER", 225, 150);
}
}
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("HangMan");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel rubrikOrd = new JLabel("rätt gissade ord");
rubrikOrd.setOpaque(false);
rubrikOrd.setBackground(Color.GREEN);
rubrikOrd.setBounds(10, 10, 100, 20);
JLabel rättord = new JLabel();
rättord.setOpaque(true);
rättord.setBackground(Color.GREEN);
rättord.setBounds(10, 35, 100, 20);
JTextField field = new JTextField();
field.setVisible(true);
JButton b = new JButton("ok");
b.setBounds(370, 300, 100, 30);
frame.add(b);
field.setSize(300, 30);
field.setLocation(60, 300);
field.setVisible(true);
frame.add(field);
frame.add(rättord);
frame.add(rubrikOrd);
frame.setBackground(Color.white);
frame.setSize(600, 400);
HangManSO object = new HangManSO(b, field, frame, rättord);
b.addActionListener(object);
field.addActionListener(object);
frame.add(object);
frame.setVisible(true);
}
#Override
public void mouseClicked(MouseEvent e) {
System.out.println(e.getX() + " " + e.getY());
}
#Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
#Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
#Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
#Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
}
The code is needlessly complex and that is making it hard for you to see the issue.
Your actual issue starts on this line where you assign the entire correct word d to randomWord:
char [] randomWord = d.toCharArray();
//randomWord now equals `{r,o,m,e}`
You then use the entire correct word and append it to your builder string:
//builder equals a blank string of 4 characters " "
builder.append(randomWord);
//builder now equals a string with 4 blank characters followed by some " rome"
System.out.print(builder.toString());
So now when you try to get the index of your letter for example if you guessed 'm' it will return a large index:
//the builder string now " rome"
int index = builder.indexOf(String.valueOf(CharGuessedLetter));
//So `m` will be found at the 6th index of " rome"
System.out.print("index = " + index);
So when you use the next line with an index of 6 it will be out of bounds because the builderDisplay String is only 4 characters long for the word rome:
builderDisplay.setCharAt(index, CharGuessedLetter);
So what can you do to fix this? I won't give you an exact answer, but You should start by thinking about the above code, and where it goes wrong (append), and how you can return the correct character index (using the d string)
Final hint, the following line would get a correct character index of a character, note how we use the d string, not the builder string:
int index = d.indexOf(String.valueOf(CharGuessedLetter));
Edit:
Following on from comments. You also need to fill the string builder with blanks to avoid this issue:
//Create the hangman object
HangManSO object = new HangManSO(b, field, frame, rättord);
//Now populate the string builder with empty characters "_" or you could use a space " "
for (int i = 0; i < object.d.length(); i++) {
object.builderDisplay.append('_');
}
Note also that you should check for duplicate characters in your word:
//check against every letter of the word to make sure that it gets duplicate characters
for (int i = 0; i < d.length(); i++) {
if (d.charAt(i) == charGuessedLetter){
builderDisplay.setCharAt(i, charGuessedLetter);
System.out.println("Match found");
}
}
rättord.setText(builderDisplay.toString());
Related
I'm trying to make/add functions to a hang-man game and I stumbled upon the following problems when trying to display the letters that are correctly guessed.
The part of the code that I am implying on is meant to work as follows:
When a letter is correctly guessed index is supposed to get the index the following letter was placed in, in the char array: randomWord.
What I want to happen after that is for the array: displayWord to be set on the label: rättord and then for every letter that is correctly guessed the index that contains that letter gets visible.
How do I add the array: displayWord to the JLabel: rättord?
I want to do this with the purpose of only revealing one letter a time in the array.
The goal is to make every letter that is correctly guessed appear in the JLabel rättord, any other methods of displaying correctly guessed words are welcome.
(the current code )
The code:
package hangmann;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Arrays;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class HangMan extends JPanel implements ActionListener, MouseListener {
private int error;
JButton button;
JTextField field;
JFrame frame;
JLabel rättord;
HangMan(JButton button, JTextField field, JFrame frame, JLabel rättord) {
this.button = button;
this.field = field;
this.frame = frame;
this.rättord = rättord;
this.addMouseListener(this);
}
static String [] ord = {"london", "stockholm", "berlin", "rome", "" };
static Random r = new Random();
static int randomNumber=r.nextInt(ord.length);
static String d = ord[randomNumber];
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
String guessedWord = field.getText();
if (source.equals(button)) {
if (!d.contains(guessedWord)) {
error++;
frame.repaint();
rättord.setText(d);
}
if (d.contains(guessedWord)) {
char [] randomWord = d.toCharArray();
char CharGuessedWord = guessedWord.charAt(0);
int index = 0;
for(int i = 0; i < randomWord.length; i++ ) {
if(randomWord[i] == CharGuessedWord) {
index = 1+ i;}
else {
i = i+ 1 ;
}
}
char [] displayWord = d.toCharArray();
rättord.setText(Integer.toString(index));
}
field.setText("");
}
}
public void paintComponent(Graphics g ) {
super.paintComponent(g);
if (error == 1)
g.drawLine(10, 270, 500, 270);
if (error == 2) {
g.drawLine(10, 270, 500, 270);
g.drawLine(200, 30, 200, 270);
}
if (error == 3) {
g.drawLine(10, 270, 500, 270);
g.drawLine(200, 30, 200, 270);
g.drawLine(200, 30, 350, 30);
}
if (error == 4) {
g.drawLine(10, 270, 500, 270);
g.drawLine(200, 30, 200, 270);
g.drawLine(200, 30, 350, 30);
g.drawLine(200, 30, 350, 30);
g.drawLine(250, 30, 200, 75);
}
if (error == 5) {
g.drawLine(10, 270, 500, 270);
g.drawLine(200, 30, 200, 270);
g.drawLine(200, 30, 350, 30);
g.drawLine(200, 30, 350, 30);
g.drawLine(250, 30, 200, 75);
g.drawLine(350, 30, 350,100);
}
if (error == 6) {
g.drawLine(10, 270, 500, 270);
g.drawLine(200, 30, 200, 270);
g.drawLine(200, 30, 350, 30);
g.drawLine(200, 30, 350, 30);
g.drawLine(250, 30, 200, 75);
g.drawLine(350, 30, 350,100);
g.drawOval(330, 100, 40, 40);
}
if (error == 7) {
g.drawLine(10, 270, 500, 270);
g.drawLine(200, 30, 200, 270);
g.drawLine(200, 30, 350, 30);
g.drawLine(200, 30, 350, 30);
g.drawLine(250, 30, 200, 75);
g.drawLine(350, 30, 350,100);
g.drawOval(330, 100, 40, 40);
g.drawLine(350, 140, 350,200);
}
if (error == 8) {
g.drawLine(10, 270, 500, 270);
g.drawLine(200, 30, 200, 270);
g.drawLine(200, 30, 350, 30);
g.drawLine(200, 30, 350, 30);
g.drawLine(250, 30, 200, 75);
g.drawLine(350, 30, 350,100);
g.drawOval(330, 100, 40, 40);
g.drawLine(350, 140, 350,200);
g.drawLine(350, 200,390, 240);
}
if (error == 9) {
g.drawLine(10, 270, 500, 270);
g.drawLine(200, 30, 200, 270);
g.drawLine(200, 30, 350, 30);
g.drawLine(200, 30, 350, 30);
g.drawLine(250, 30, 200, 75);
g.drawLine(350, 30, 350,100);
g.drawOval(330, 100, 40, 40);
g.drawLine(350, 140, 350,200);
g.drawLine(350, 200,390, 240);
g.drawLine(350, 200, 310, 240);
}
if (error == 9) {
g.drawLine(10, 270, 500, 270);
g.drawLine(200, 30, 200, 270);
g.drawLine(200, 30, 350, 30);
g.drawLine(200, 30, 350, 30);
g.drawLine(250, 30, 200, 75);
g.drawLine(350, 30, 350,100);
g.drawOval(330, 100, 40, 40);
g.drawLine(350, 140, 350,200);
g.drawLine(350, 200,390, 240);
g.drawLine(350, 200, 310, 240);
}
if (error == 10) {
g.drawLine(10, 270, 500, 270);
g.drawLine(200, 30, 200, 270);
g.drawLine(200, 30, 350, 30);
g.drawLine(200, 30, 350, 30);
g.drawLine(250, 30, 200, 75);
g.drawLine(350, 30, 350,100);
g.drawOval(330, 100, 40, 40);
g.drawLine(350, 140, 350,200);
g.drawLine(350, 200,390, 240);
g.drawLine(350, 200, 310, 240);
g.drawLine(350, 170, 400, 150);
}
if (error == 11) {
g.drawLine(10, 270, 500, 270);
g.drawLine(200, 30, 200, 270);
g.drawLine(200, 30, 350, 30);
g.drawLine(200, 30, 350, 30);
g.drawLine(250, 30, 200, 75);
g.drawLine(350, 30, 350,100);
g.drawOval(330, 100, 40, 40);
g.drawLine(350, 140, 350,200);
g.drawLine(350, 200,390, 240);
g.drawLine(350, 200, 310, 240);
g.drawLine(350, 170, 400, 150);
g.drawLine(350, 170, 300, 150);
}
if(error > 11) {
g.setFont(new Font("Calibri", Font.BOLD, 26));
g.drawString("GAME OVER", 225, 150);
}
}
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("HangMan");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel rubrikOrd = new JLabel("rätt gissade ord");
rubrikOrd.setOpaque(false);
rubrikOrd.setBackground(Color.GREEN);
rubrikOrd.setBounds(10, 10, 100, 20);
JLabel rättord = new JLabel();
rättord.setOpaque(true);
rättord.setBackground(Color.GREEN);
rättord.setBounds(10, 35, 100, 20);
JTextField field = new JTextField();
field.setVisible(true);
JButton b = new JButton("ok");
b.setBounds(370, 300, 100, 30);
frame.add(b);
field.setSize(300, 30);
field.setLocation(60, 300);
field.setVisible(true);
frame.add(field);
frame.add(rättord);
frame.add(rubrikOrd);
frame.setBackground(Color.white);
frame.setSize(600, 400);
HangMan object = new HangMan(b, field, frame, rättord);
b.addActionListener(object);
field.addActionListener(object);
frame.add(object);
frame.setVisible(true);
}
#Override
public void mouseClicked(MouseEvent e) {
System.out.println(e.getX() + " " + e.getY());
}
#Override
public void mousePressed(MouseEvent e) {
}
#Override
public void mouseReleased(MouseEvent e) {
}
#Override
public void mouseEntered(MouseEvent e) {
}
#Override
public void mouseExited(MouseEvent e) {
}
}
The part I'm referring to:
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
String guessedWord = field.getText();
if (source.equals(button)) {
if (!d.contains(guessedWord)) {
error++;
frame.repaint();
rättord.setText(d);
}
if (d.contains(guessedWord)) {
char [] randomWord = d.toCharArray();
char CharGuessedWord = guessedWord.charAt(0);
int index = 0;
for(int i = 0; i < randomWord.length; i++ ) {
if(randomWord[i] == CharGuessedWord) {
index = 1+ i;}
else {
i = i+ 1 ;
}
}
char [] displayWord = d.toCharArray();
rättord.setText(Integer.toString(index));
}
field.setText("");
}
}
I cant comment, but isnt it possible for you to use a char array with same size as the randomWord, but all initialized to maybe an * or _, and on correct guess, replace the index with the char, then you can use a StringBuilder as mentioned by #camickr or you can use some custom toString() or other custom method to return the whole string representation of array elements and setText() for your label
I'm having trouble with my buttons. I know they're working because I've tested them out by exiting the problem through System.exit. Here is what my output looks like:
http://imgur.com/Ks7mIFa
When I click the close button, the handle on the switch should redraw to the other side and the close button should change to open. When I click the open button, it should do the opposite. However, the buttons aren't doing anything. What am I doing wrong?
public class ProgrammingAssignment2 {
public static void main(String[] args) {
boolean ison = false;
// Objects
Circuit circuitObject = new Circuit();
Controller controllerObject = new Controller();
Draw drawObject = new Draw();
AllListeners listenerObject = new AllListeners();
drawObject.window();
circuitObject.buttons(drawObject, ison);
controllerObject.openFile("Programming Assignment 2 Data.txt", drawObject);
}
}
Class circuit just creates the buttons
import javax.swing.JButton;
public class Circuit {
public void buttons(Draw drawObject, boolean ison) {
AllListeners listenerObject = new AllListeners();
if (ison == true) {
JButton openButton = new JButton("Close");
openButton.addActionListener(listenerObject);
openButton.setBounds(200, 100, 50, 20);
drawObject.add(openButton);
} else if (ison == false) {
JButton closeButton = new JButton("Open");
closeButton.addActionListener(listenerObject);
closeButton.setBounds(50, 100, 50, 20);
drawObject.add(closeButton);
}
}
}
Draw class does most of the work. It creates all the graphics and reads in a text file that has the titles of each object(like switch and lightbulb).
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.swing.JFrame;
import java.awt.Graphics;
public class Draw extends JFrame {
private String[] line = new String[5];
private int counter = 0;
private boolean ison;
public void window() {
setSize(500, 500);
setTitle("Programming Assignment 2");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public void readFile(String filename) {
counter = 1;
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(filename));
for (int i = 0; i < 4; i++) {
line[i] = br.readLine();
}
} catch (FileNotFoundException e) {
String error = "File was not found";
System.out.println(error.toString());
System.out.println("or could not be opened.");
} catch (IOException e) {
System.out.println("Error reading from file.");
} finally {
try {
br.close();
} catch (IOException e) {
System.out.println("Error closing file.");
}
}
}
public void paint(Graphics g) {
Circuit circuitObject = new Circuit();
super.paint(g);
if (ison == true) {
turnon(g);
circuitObject.buttons(this, ison);
} else {
turnoff(g);
}
}
public void setisOn() {
ison = true;
}
public void setisOff() {
ison = false;
}
public void turnoff(Graphics g) {
// Title
g.drawString(line[0], 150, 40);
//Switch
g.drawString(line[2], 130, 190);
g.drawRect(100, 150, 100, 20);
g.drawOval(115, 155, 10, 10);
g.drawOval(175, 155, 10, 10);
g.drawArc(140, 140, 20, 20, 180, -180);
//off switch
g.drawLine(160, 150, 182, 133);
g.drawLine(157, 142, 173, 128);
g.drawLine(173, 128, 182, 133);
//Power Supply
g.drawString(line[1], 50, 420);
g.drawRect(50, 320, 50, 80);
g.drawLine(50, 320, 70, 290);
g.drawLine(100, 320, 120, 290);
g.drawLine(70, 290, 120, 290);
g.drawLine(120, 370, 120, 290);
g.drawLine(120, 370, 100, 400);
//plus
g.drawLine(94, 310, 100, 310);
g.drawLine(97, 307, 97, 313);
// minus
g.drawLine(100, 300, 107, 300);
// pliers
g.drawRect(70, 305, 5, 10);
g.drawRect(90, 288, 5, 10);
//lightbulb
g.drawString(line[3], 400, 250);
g.drawRect(400, 200, 20, 20);
g.drawOval(395, 170, 30, 30);
// pliers
g.drawRect(400, 220, 5, 10);
g.drawRect(415, 220, 5, 10);
// plus wire to switch
g.drawLine(72, 305, 120, 160);
//bulb to switch
g.drawLine(180, 160, 400, 230);
//bulb to minus
g.drawLine(90, 290, 420, 230);
}
public void turnon(Graphics g) {
// Title
g.drawString(line[0], 150, 40);
//Switch
g.drawString(line[2], 130, 190);
g.drawRect(100, 150, 100, 20);
g.drawOval(115, 155, 10, 10);
g.drawOval(175, 155, 10, 10);
g.drawArc(140, 140, 20, 20, 180, -180);
//on switch
g.drawLine(140, 150, 122, 133);
g.drawLine(143, 142, 129, 128);
g.drawLine(122, 133, 129, 128);
//Power Supply
g.drawString(line[1], 50, 420);
g.drawRect(50, 320, 50, 80);
g.drawLine(50, 320, 70, 290);
g.drawLine(100, 320, 120, 290);
g.drawLine(70, 290, 120, 290);
g.drawLine(120, 370, 120, 290);
g.drawLine(120, 370, 100, 400);
//plus
g.drawLine(94, 310, 100, 310);
g.drawLine(97, 307, 97, 313);
// minus
g.drawLine(100, 300, 107, 300);
// pliers
g.drawRect(70, 305, 5, 10);
g.drawRect(90, 288, 5, 10);
//lightbulb
g.drawString(line[3], 400, 250);
g.drawRect(400, 200, 20, 20);
g.drawOval(395, 170, 30, 30);
// pliers
g.drawRect(400, 220, 5, 10);
g.drawRect(415, 220, 5, 10);
// plus wire to switch
g.drawLine(72, 305, 120, 160);
//bulb to switch
g.drawLine(180, 160, 400, 230);
//bulb to minus
g.drawLine(90, 290, 420, 230);
}
}
Controller doesn't do much right.
public class Controller {
public void openFile(String filename, Draw drawObject) {
drawObject.readFile(filename);
}
}
And this is the actionlisterner class
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class AllListeners implements ActionListener {
public void actionPerformed(ActionEvent e) {
Circuit circuitObject = new Circuit();
Draw drawObject = new Draw();
String buttonString = e.getActionCommand();
if (buttonString.equals("Close")) {
drawObject.setisOn();
drawObject.repaint();
} else if (buttonString.equals("Open")) {
drawObject.setisOff();
drawObject.repaint();
} else {
System.out.println("Unexpected error.");
}
}
}
You've got lots of major problems with this code including:
Drawing directly within a JFrame's paint method, something fraught with problems as you risk messing up the JFrame's own complicated painting.
Placing program logic within a painting method, a method you don't have full control over when or if it fires, and one that you shouldn't slow down
Placing component creation code within a painting method.
Trying to add multiple JButtons willy nilly rather than changing the state of an existing component.
Creating multiple Circuit objects.
Trying to use absolute positioning via setBounds(...) to place a component in a container that uses BorderLayout.
I suggest that you
Start over and scrap this code.
Draw only in a JPanel's paintComponent method, just as the tutorials will tell you to do.
Create your buttons once and only once and add them to your GUI.
Get all program logic out of the painting (here paintComponent) method, and all object state changing outside of that method as they are for painting and painting only.
Instead the logic should belong to the controller, and which should be notified of the button push.
So consider having the button push notify the control what was pushed,
the control changes the state of the program (changes variables)
and then it calls repaint so that the paintComponent method can use those variables to change its drawing.
Also, avoid using setBounds and null layouts if at all possible, and instead use layout managers/borders/nested JPanels to help you place your components.
So, I am going to have more of these panels but I don't know how to make these panels switch when the user will press a button like start or next.
//IngestionOfDigestion.java teaches the user about the digestive system through interactive components
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
public class IngestionOfDigestion extends JFrame {
public static void main(String[] args) {
IngestionOfDigestion i = new IngestionOfDigestion();
}
public IngestionOfDigestion() {//frame header
//make the frame
super("Ingestion Of Digestion");
setSize(1900, 1100);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setLocation(10, 50);
setResizable(true);
layout t = new layout();
add(t);
setContentPane(t);
setVisible(true);
}
}
class layout extends JPanel {
public Mouth m;
public CardLayout cardlay = new CardLayout();
Title title = new Title();
public layout() {
m = new Mouth();
cardlay.show();
setLayout(cardlay);
add(m, "Mouth");
add(title, "Title");
}
}
class Title extends JPanel implements ActionListener {//make title panel
private JButton c;//jbutton to start the game
private boolean startpressed;//button pressed variable
//JPanel card2;
//JPanel card3;
public Title() {//title method header
//cardstack = new JPanel(cardlay);
c = new JButton("Press to start playing");//make jbutton saying start the game
c.addActionListener(this);
add(c);
startpressed = false;
}
public void paintComponent(Graphics g) { //paint component
super.paintComponent(g);//super.paintComponent
Font title = new Font("Serif", Font.BOLD, 90);//make font
g.setFont(title);
g.drawString("Ingestion Of Digestion", 160, 100);//draw the title
if (startpressed == true) {//if buttonpressed is true
repaint();
}
}
public void actionPerformed(ActionEvent e) {//ActionPerformed
if (e.getSource() == c) {
startpressed = true;//change boolean
cardlay.next();
repaint();
}
}
}
//if button is pressed
//end title panel
class Mouth extends JPanel implements ActionListener, ChangeListener {
private JButton chew;//make chew button
private JButton next;//next button
private JSlider saliva;//make saliva slider
private boolean nextpressed;//nextbuttonpressed variable
private boolean chewpressed;//buttonpressed variable
Mouth() {//mouth method
chew = new JButton("Press to chew the food");
chew.addActionListener(this);
add(chew);
chewpressed = false;
JSlider saliva = new JSlider(JSlider.HORIZONTAL, 0, 100, 0);
add(saliva);
next = new JButton("Press to go to the next step of digestion");
next.addActionListener(this);
add(next);
nextpressed = false;
}
public void paintComponent(Graphics g) {//paint component
super.paintComponent(g);//super.paintComponent
//draw the head
Color skin = new Color(255, 204, 133);
g.setColor(skin);
g.fillArc(810, 1000, 550, 550, 0, 180);
g.fillRect(1085, 600, 150, 550);
g.fillRect(700, 250, 535, 380);
int[] w = {700, 700, 660};
int[] t = {340, 420, 420};
g.fillPolygon(w, t, 3);
Color hair = new Color(100, 60, 0);
g.setColor(hair);
g.fillArc(700, 175, 535, 150, 0, 180);
g.setColor(Color.WHITE);
g.fillOval(730, 275, 45, 45);
g.setColor(Color.BLACK);
g.fillOval(752, 297, 15, 15);
g.setColor(Color.RED);
g.fillRect(700, 480, 285, 75);
g.fillRect(985, 497, 145, 45);
g.fillRect(1130, 497, 30, 590);
g.setColor(Color.WHITE);
g.fillRect(702, 480, 15, 20);
g.fillRect(719, 480, 15, 20);
g.fillRect(736, 480, 15, 20);
g.fillRect(753, 480, 24, 20);
g.fillRect(779, 480, 24, 20);
g.fillRect(805, 480, 24, 20);
g.fillRect(702, 535, 15, 20);
g.fillRect(719, 535, 15, 20);
g.fillRect(736, 535, 15, 20);
g.fillRect(753, 535, 24, 20);
g.fillRect(779, 535, 24, 20);
g.fillRect(805, 535, 24, 20);
if (chewpressed == true) {
Color skint = new Color(255, 204, 133);
g.setColor(skint);
g.fillArc(810, 1000, 550, 550, 0, 180);
g.fillRect(1085, 600, 150, 550);
g.fillRect(700, 250, 285, 380);
int[] wt = {700, 700, 660};
int[] tw = {340, 420, 420};
g.fillPolygon(w, t, 3);
Color hairt = new Color(100, 60, 0);
g.setColor(hairt);
g.fillArc(700, 175, 535, 150, 0, 180);
g.setColor(Color.WHITE);
g.fillOval(730, 275, 45, 45);
g.setColor(Color.BLACK);
g.fillOval(752, 297, 15, 15);
g.setColor(Color.RED);
g.fillRect(700, 480, 285, 42);
g.fillRect(985, 497, 145, 35);
g.fillRect(1130, 497, 30, 590);
g.setColor(Color.WHITE);
g.fillRect(702, 480, 15, 20);
g.fillRect(719, 480, 15, 20);
g.fillRect(736, 480, 15, 20);
g.fillRect(753, 480, 24, 20);
g.fillRect(779, 480, 24, 20);
g.fillRect(805, 480, 24, 20);
g.fillRect(702, 502, 15, 20);
g.fillRect(719, 502, 15, 20);
g.fillRect(736, 502, 15, 20);
g.fillRect(753, 502, 24, 20);
g.fillRect(779, 502, 24, 20);
g.fillRect(805, 502, 24, 20);
repaint();
}
}
public void actionPerformed(ActionEvent e) {//ActionPerformed
if (chew.getText().equals("Press to chew the food")) {//if "press my belly" pressed,
chewpressed = true;//change boolean
repaint();
if (next.getText().equals("Press to go to the next step of digestion")) {
nextpressed = true;
}
repaint();
}
}
public void stateChanged(ChangeEvent e) {
int location1 = saliva.getValue();
}
}
//draw the info
//if buttonpressed is true
//show head with teeth clenched
//else if slidermoved is true
//show saliva moving in mouth
//else if nextbuttonpressed is true
//go to next panel
//ActionPerformed
//if button is pressed
//buttonpressed is true
//else if slider is moved
//slidermoved is true
//else if next button is pressed
//nextbuttonpressed is true
I have a lot of QuadCurve2D methods in a drawing, but when I fill them they don't actually fill the whole image.
Code for fill and curves:
g2.setStroke(new BasicStroke(5));
QuadCurve2D earLeft1 = new QuadCurve2D.Double(145, 155, 137.5, 49, 150, 49);
g2.draw(earLeft1);
QuadCurve2D earLeft2 = new QuadCurve2D.Double(150, 49, 156.25, 49, 200, 100);
g2.draw(earLeft2);
QuadCurve2D betweenEars = new QuadCurve2D.Double(200, 100, 237.5, 88, 262.5, 87.5);
g2.draw(betweenEars);
QuadCurve2D earRight1 = new QuadCurve2D.Double(262.5, 87.5, 287.5, 25, 300, 25);
g2.draw(earRight1);
QuadCurve2D earRight2 = new QuadCurve2D.Double(300, 25, 312.5, 25, 337.5, 137.5);
g2.draw(earRight2);
CubicCurve2D headPhoneLeft = new CubicCurve2D.Double(145, 155, 75, 175, 100, 250, 150, 250);
g2.draw(headPhoneLeft);
CubicCurve2D headPhoneRight = new CubicCurve2D.Double(337.5, 137.5, 387.5, 137.5, 393.75, 188, 362.5, 225);
g2.draw(headPhoneRight);
QuadCurve2D headbandTop1 = new QuadCurve2D.Double(109, 177, 150, 75, 225, 50);
g2.draw(headbandTop1);
QuadCurve2D headbandTop2 = new QuadCurve2D.Double(225, 50, 300, 50, 372, 150);
g2.draw(headbandTop2);
QuadCurve2D headbandBottom1 = new QuadCurve2D.Double(135, 155, 150, 112.5, 212.5, 78);
g2.draw(headbandBottom1);
QuadCurve2D headbandBottom2 = new QuadCurve2D.Double(212.5, 78, 306.25, 78, 351, 137.5);
g2.draw(headbandBottom2);
QuadCurve2D faceBottomLeft = new QuadCurve2D.Double(150, 250, 162.5, 275, 200, 300);
g2.draw(faceBottomLeft);
QuadCurve2D faceBottomRight = new QuadCurve2D.Double(362.5, 225, 363.5, 237.5, 350, 262.5);
g2.draw(faceBottomRight);
CubicCurve2D leftArm = new CubicCurve2D.Double(200, 300, 87.5, 300, 87.5, 375, 188.5, 362.5);
g2.draw(leftArm);
CubicCurve2D rightArm = new CubicCurve2D.Double(350, 262.5, 425, 237.5, 450, 300, 375, 325);
g2.draw(rightArm);
QuadCurve2D leftLegOuter = new QuadCurve2D.Double(188.5, 362.5, 154, 425, 200, 512.5);
g2.draw(leftLegOuter);
QuadCurve2D rightLegOuter = new QuadCurve2D.Double(375, 325, 388.5, 356.25, 387.5, 412.5);
g2.draw(rightLegOuter);
QuadCurve2D leftFootTop = new QuadCurve2D.Double(200, 512.5, 125, 500, 130, 562.5);
g2.draw(leftFootTop);
QuadCurve2D leftFootBottom = new QuadCurve2D.Double(130, 562.5, 175, 575, 262.5, 562.5);
g2.draw(leftFootBottom);
QuadCurve2D leftLegInner = new QuadCurve2D.Double(262.5, 562.5, 237.5, 400, 268.75, 363);
g2.draw(leftLegInner);
QuadCurve2D rightLegInner = new QuadCurve2D.Double(268.75, 363, 318.75, 362.5, 337.5, 475);
g2.draw(rightLegInner);
QuadCurve2D rightFootBottom = new QuadCurve2D.Double(337.5, 475, 400, 480, 455, 470);
g2.draw(rightFootBottom);
QuadCurve2D rightFootTop = new QuadCurve2D.Double(455, 470, 450, 400, 387.5, 412.5);
g2.draw(rightFootTop);
CubicCurve2D tailInner = new CubicCurve2D.Double(268.75, 363, 287.5, 450,125, 387.5, 62.5, 400);
g2.draw(tailInner);
//QuadCurve2D tailInner1 = new QuadCurve2D.Double(268.75, 363, 275, 387.5, 200, 400);
//g2.draw(tailInner1);
//QuadCurve2D tailInner2 = new QuadCurve2D.Double(200, 400, 125, 387.5, 62.5, 400);
//g2.draw(tailInner2);
QuadCurve2D tailOuter1 = new QuadCurve2D.Double(62.5, 400, 25, 425, 200, 437.5);
g2.draw(tailOuter1);
QuadCurve2D tailOuter2 = new QuadCurve2D.Double(200, 437.5, 287.5, 425, 300, 375);
g2.draw(tailOuter2);
int[] x = {175, 200, 225, 225, 287, 300, 309, 337, 325, 309, 302, 292, 240, 227, 226, 215};
int[] y = {225, 210, 237, 200, 187, 212, 187, 187, 262, 262, 230, 268, 275, 250, 277, 281};
GeneralPath mouthAndTeeth = new GeneralPath();
mouthAndTeeth.moveTo(x[0], y[0]);
for (int index = 1; index < x.length; index++) {
mouthAndTeeth.lineTo(x[index], y[index]);
};
mouthAndTeeth.closePath();
g2.draw(mouthAndTeeth);
/*
g2.fill(earLeft1);
g2.fill(earLeft2);
g2.fill(earRight1);
g2.fill(earRight2);
g2.fill(betweenEars);
g2.fill(headbandBottom1);
g2.fill(headbandBottom2);
g2.fill(headbandTop1);
g2.fill(headbandTop2);
g2.fill(headPhoneLeft);
g2.fill(headPhoneRight);
g2.fill(faceBottomLeft);
g2.fill(faceBottomRight);
g2.fill(leftArm);
g2.fill(rightArm);
g2.fill(leftFootBottom);
g2.fill(leftFootTop);
g2.fill(rightFootBottom);
g2.fill(rightFootTop);
g2.fill(leftLegInner);
g2.fill(leftLegOuter);
g2.fill(rightLegInner);
g2.fill(rightLegOuter);
//g2.fill(tailInner1);
//g2.fill(tailInner2);
g2.fill(tailOuter1);
g2.fill(tailOuter2);
*/
This has been my only solution but it's not doing it. Suggestions?
"A" solution might be to paint the "shape" to a BufferedImage and simply scale the image, but this will scale the stroke/line size as well.
A better solution might be to encapsulate the drawing into a Shape and use Shape#createTransformedShape instead.
public class Cat extends Path2D.Double {
public Cat() {
//Left Ear
moveTo(145, 155);
curveTo(145, 155, 137.5, 49, 150, 49);
moveTo(150, 49);
curveTo(150, 49, 156.25, 49, 200, 100);
// Between Ears
moveTo(200, 100);
curveTo(200, 100, 237.5, 88, 262.5, 87.5);
// Right ear
moveTo(262.5, 87.5);
curveTo(262.5, 87.5, 287.5, 25, 300, 25);
moveTo(300, 25);
curveTo(300, 25, 312.5, 25, 337.5, 137.5);
// Head phone left
moveTo(300, 25);
append(new CubicCurve2D.Double(145, 155, 75, 175, 100, 250, 150, 250), false);
moveTo(337.5, 137.5);
append(new CubicCurve2D.Double(337.5, 137.5, 387.5, 137.5, 393.75, 188, 362.5, 225), false);
moveTo(109, 177);
curveTo(109, 177, 150, 75, 225, 50);
moveTo(225, 50);
curveTo(225, 50, 300, 50, 372, 150);
moveTo(135, 155);
curveTo(135, 155, 150, 112.5, 212.5, 78);
moveTo(212.5, 78);
curveTo(212.5, 78, 306.25, 78, 351, 137.5);
moveTo(150, 250);
curveTo(150, 250, 162.5, 275, 200, 300);
moveTo(362.5, 225);
curveTo(362.5, 225, 363.5, 237.5, 350, 262.5);
moveTo(200, 300);
append(new CubicCurve2D.Double(200, 300, 87.5, 300, 87.5, 375, 188.5, 362.5), false);
moveTo(350, 262.5);
append(new CubicCurve2D.Double(350, 262.5, 425, 237.5, 450, 300, 375, 325), false);
moveTo(188.5, 362.5);
curveTo(188.5, 362.5, 154, 425, 200, 512.5);
moveTo(375, 325);
curveTo(375, 325, 388.5, 356.25, 387.5, 412.5);
moveTo(200, 512.5);
curveTo(200, 512.5, 125, 500, 130, 562.5);
moveTo(130, 562.5);
curveTo(130, 562.5, 175, 575, 262.5, 562.5);
moveTo(262.5, 562.5);
curveTo(262.5, 562.5, 237.5, 400, 268.75, 363);
moveTo(268.75, 363);
curveTo(268.75, 363, 318.75, 362.5, 337.5, 475);
moveTo(337.5, 475);
curveTo(337.5, 475, 400, 480, 455, 470);
moveTo(455, 470);
curveTo(455, 470, 450, 400, 387.5, 412.5);
moveTo(268.75, 363);
append(new CubicCurve2D.Double(268.75, 363, 287.5, 450, 125, 387.5, 62.5, 400), false);
moveTo(62.5, 400);
curveTo(62.5, 400, 25, 425, 200, 437.5);
moveTo(200, 437.5);
curveTo(200, 437.5, 287.5, 425, 300, 375);
int[] x = {175, 200, 225, 225, 287, 300, 309, 337, 325, 309, 302, 292, 240, 227, 226, 215};
int[] y = {225, 210, 237, 200, 187, 212, 187, 187, 262, 262, 230, 268, 275, 250, 277, 281};
GeneralPath mouthAndTeeth = new GeneralPath();
mouthAndTeeth.moveTo(x[0], y[0]);
for (int index = 1; index < x.length; index++) {
mouthAndTeeth.lineTo(x[index], y[index]);
}
mouthAndTeeth.closePath();
append(mouthAndTeeth, false);
}
}
And then scale the shape based on the available space of the container...
import java.awt.BasicStroke;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.geom.CubicCurve2D;
import java.awt.geom.GeneralPath;
import java.awt.geom.Path2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
#Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private Cat cat;
public TestPane() {
cat = new Cat();
}
#Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.setStroke(new BasicStroke(5));
int catWidth = cat.getBounds().x + cat.getBounds().width;
int catHeight = cat.getBounds().y + cat.getBounds().height;
int width = getWidth() - 1;
int height = getHeight() - 1;
double scaleWidth = width / (double)catWidth;
double scaleHeight = height / (double)catHeight;
double scale = Math.min(scaleHeight, scaleWidth);
AffineTransform at = AffineTransform.getScaleInstance(scale, scale);
Shape shape = cat.createTransformedShape(at);
g2d.draw(shape);
g2d.dispose();
}
}
}
Which you use will come down to needs, for example, using a Shape like this, won't allow you to color individual sections differently
This Friday I need to hand in my Java project – I've only been programming for about two weeks now – and I really want to add a PNG file to my JPanel. Below you find my code, the name of the image is java.png, I put it in the same folder as my src files. I just can't find a good tutorial on how to do this. Please help me!
Note: the image should be inserted in the booOpAfbeam structure almost at the bottom of the code, and also sorry for this unorganized message, I have no clue how to post my code decently.
import java.awt.Color;
import java.awt.Graphics;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.ImageObserver;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.Image;
import java.awt.Dimension;
import javax.swing.*;
public class Project extends JPanel {
private JLabel invoerLabel, invoerKleur, invoerKleur2, invoerBril, invoerBril2;
private JTextField invoerAantal, invoerK, invoerB;
private int intAantal;
private String strKleur="";
private String strBril="";
private JButton knop, knopBril, btnOpAf, btnOpAfbeam;
private Boolean booOpAf = false, booOpAfbeam = false;
private Image image1;
public Project(){
setLayout(null);
invoerLabel = new JLabel("Voer aantal stoelen in: ");
invoerAantal = new JTextField (10);
invoerKleur = new JLabel("Voer kleur stoel in: ");
invoerKleur2 = new JLabel("(blauw, rood, groen, paars, roos, zwart, geel, oranje)");
invoerK = new JTextField (10);
invoerBril = new JLabel("Voer kleur bril in: ");
invoerBril2 = new JLabel("(blauw, rood, groen, paars, roos, zwart, geel, oranje)");
invoerB = new JTextField (10);
knopBril = new JButton ("ok");
knop = new JButton("ok");
btnOpAf = new JButton ("Wijs/Wijs niet");
btnOpAfbeam = new JButton ("aan/uit");
knop.addActionListener (new InvoervakHandler());
knopBril.addActionListener(new InvoervakHandler2());
btnOpAf.addActionListener(new aanuit());
btnOpAfbeam.addActionListener(new beam());
invoerLabel.setBounds(1000, 10, 150, 20);
invoerAantal.setBounds(1150, 10, 60, 20);
invoerKleur.setBounds(1000, 70, 120, 20);
invoerKleur2.setBounds(985, 90, 300, 20);
invoerK.setBounds(1150, 70, 60, 20);
knop.setBounds(1155, 120, 50, 20);
invoerBril.setBounds(1000, 170, 150, 20);
invoerBril2.setBounds(985, 195, 300, 20);
invoerB.setBounds(1150, 170, 60, 20);
knopBril.setBounds(1155, 220, 50, 20);
btnOpAf.setBounds(1000,275,115,20);
btnOpAfbeam.setBounds(365, 26, 75, 20);
add(invoerLabel);
add(invoerAantal);
add(invoerKleur);
add(invoerKleur2);
add(invoerK);
add(invoerBril);
add(invoerBril2);
add(invoerB);
add(knop);
add(knopBril);
add(btnOpAf);
add(btnOpAfbeam);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
ImageIcon i = new ImageIcon("java.png");
image1 = i.getImage();
g.drawImage(image1, 0, 0, null);
ImageIcon("java.png");
//labels//
invoerBril2.setForeground(new Color(0,173,173));
invoerKleur2.setForeground(new Color(0,173,173));
invoerLabel.setForeground(new Color(227,227,227));
invoerKleur.setForeground(new Color(227,227,227));
invoerBril.setForeground(new Color(227,227,227));
//vloer
g.setColor(new Color(102,77,51));
g.fillRect(0, 375, 1000, 200);
//muur
g.setColor(new Color(99,136,176));
g.fillRect(0, 0, 1000, 400);
//achtergrond kleur balk//
g.setColor(new Color(0,102,53));
g.fillRect(980, 0, 386, 766);
//beamer
g.setColor(new Color(122,122,122));
g.fillRect(355,20,100,30);
g.fillRect(397,0,15,40);
g.setColor(Color.BLACK);
g.fillRect(355, 20, 100, 3);
g.fillRect(355, 50, 100, 3);
g.fillRect(352, 20, 3, 33);
g.fillRect(452, 20, 3, 33);
g.fillRect(410, 0, 3, 20);
g.fillRect(395, 0, 3, 20);
//bord
g.setColor(new Color(98,121,74));
g.fillRect(250, 100,300 , 200);
g.setColor(Color.BLACK);
g.fillRect(250, 300,300 , 10);
g.fillRect(250, 100,300 , 10);
g.fillRect(250, 100,10 , 200);
g.fillRect(550, 100,10 , 210);
//boekenkast horizontale balken
g.setColor(Color.BLACK);
g.fillRect(50, 160, 30, 250);
g.fillRect(200, 160, 30, 250);
//boekenkast verticale balken
g.fillRect(50, 160, 150, 20);
g.fillRect(50, 220, 150, 20);
g.fillRect(50, 280, 150, 20);
g.fillRect(50, 340, 150, 20);
//boekenkast boeken rij 1
g.setColor(new Color(204,0,0));
g.fillRect(80, 180, 20, 40);
g.setColor(new Color(0,204,102));
g.fillRect(110, 180, 20, 40);
g.setColor(new Color(204,102,0));
g.fillRect(140, 180, 20, 40);
g.setColor(new Color(204,204,0));
g.fillRect(170, 180, 20, 40);
//boekenkast boeken rij 2
g.setColor(new Color(0,204,102));
g.fillRect(80, 240, 20, 40);
g.setColor(new Color(204,0,0));
g.fillRect(110, 240, 20, 40);
g.setColor(new Color(204,102,0));
g.fillRect(140, 240, 20, 40);
g.setColor(new Color(204,204,0));
g.fillRect(170, 240, 20, 40);
//boekenkast boeken rij 3
g.setColor(new Color(204,0,0));
g.fillRect(80, 300, 20, 40);
g.setColor(new Color(204,102,0));
g.fillRect(110, 300, 20, 40);
g.setColor(new Color(204,204,0));
g.fillRect(140, 300, 20, 40);
g.setColor(new Color(0,204,102));
g.fillRect(170, 300, 20, 40);
//boeklabels
g.setColor(new Color(224,224,224));
g.fillRect(85,190,10,20);
g.fillRect(115,190,10,20);
g.fillRect(145,190,10,20);
g.fillRect(175,190,10,20);
g.fillRect(85,250,10,20);
g.fillRect(115,250,10,20);
g.fillRect(145,250,10,20);
g.fillRect(175,250,10,20);
g.fillRect(85,310,10,20);
g.fillRect(115,310,10,20);
g.fillRect(145,310,10,20);
g.fillRect(175,310,10,20);
//hoofd//
g.setColor(new Color(255,237,184));
g.fillOval(615,170,150,150);
g.setColor(new Color(255,255,255));
g.fillOval(645,220,25,25);
g.fillOval(715,220,25,25);
g.setColor(new Color(0,0,0));
g.fillOval(655,230,10,10);
g.fillOval(725,230,10,10);
g.drawArc(675,240,40,40,0,-180);
g.drawArc(635,250,115,50,0,-180);
//lichaam
g.setColor(new Color(153,153,0));
g.fillRect(650, 300, 100, 125);
g.setColor(Color.BLACK);
g.fillRect(650, 430, 25, 60);
g.fillRect(730, 430, 25, 60);
g.fillRect(650, 420, 100, 15);
g.setColor(Color.BLUE);
g.fillOval(632, 470, 45, 25);
g.fillOval(725, 470, 45, 25);
// bureau
g.setColor(new Color(184, 184, 184));
g.fillRect(540, 410, 325, 20);
g.fillRect(540, 430, 20, 60);
g.fillRect(845, 430, 20, 60);
//vingers
g.setColor(new Color(255,237,184));
g.fillOval(785, 375, 10, 25);
g.fillOval(775, 375, 10, 25);
g.fillOval(765, 375, 10, 25);
g.fillOval(755, 375, 10, 25);
//pc
g.setColor(Color.BLACK);
g.fillRect(650, 280, 175, 100);
g.fillRect(676, 400, 125, 10);
g.fillRect(730, 375, 15, 30);
//
g.setColor(new Color(184, 184, 184));
g.fillRect(660, 320, 20, 5);
g.fillRect(660, 340, 20, 5);
g.fillRect(795, 320, 20, 5);
g.fillRect(795, 340, 20, 5);
//apple
g.fillOval(725, 320, 20, 20);
g.fillOval(732, 310, 5, 10);
g.setColor(Color.BLACK);
g.fillOval(735, 325, 10, 10);
if(strBril.equals("blauw")) {
g.setColor(Color.BLUE);
}
if(strBril.equals("rood")) {
g.setColor(Color.RED);
}
if(strBril.equals("groen")) {
g.setColor(Color.GREEN);
}
if(strBril.equals("paars")) {
g.setColor(new Color(204,51,255));
}
if(strBril.equals("roos")) {
g.setColor(new Color(255,51,204));
}
if(strBril.equals("zwart")) {
g.setColor(Color.BLACK);
}
if(strBril.equals("geel")) {
g.setColor(Color.YELLOW);
}
if(strBril.equals("oranje")) {
g.setColor(Color.ORANGE);
}{
//bril//
//linkerglas
g.fillRect(600,200,80,5);
g.fillRect(600,200,5,50);
g.fillRect(600,250,80,5);
g.fillRect(680,200,5,55);
//tussenbeentje//
g.fillRect(680,225,20,10);
//rechterglas
g.fillRect(700,200,80,5);
g.fillRect(700,200,5,50);
g.fillRect(700,250,80,5);
g.fillRect(780,200,5,55);
}
int teller1;
if(strKleur.equals("blauw")) {
g.setColor(Color.BLUE);
}
if(strKleur.equals("rood")) {
g.setColor(Color.RED);
}
if(strKleur.equals("groen")) {
g.setColor(Color.GREEN);
}
if(strKleur.equals("paars")) {
g.setColor(new Color(204,51,255));
}
if(strKleur.equals("roos")) {
g.setColor(new Color(255,51,204));
}
if(strKleur.equals("zwart")) {
g.setColor(Color.BLACK);
}
if(strKleur.equals("geel")) {
g.setColor(Color.YELLOW);
}
if(strKleur.equals("oranje")) {
g.setColor(Color.ORANGE);
}
int Ra = 20;
int Rb = 20;
int Rc = 40;
int Rd = 20;
for (teller1=1; teller1 <= intAantal; teller1++) {
g.fillRect(Ra,450,10,50);
g.fillRect(Rb,500,50,10);
g.fillRect(Rc,500,10,30);
g.fillRect(Rd,530,50,10);
Ra = Ra + 70;
Rb = Rb + 70;
Rc = Rc + 70;
Rd = Rd + 70;
}
if (booOpAf) {
if (!booOpAf) {
g.setColor(new Color(153,153,0));
g.fillRect(625, 300, 30, 100);
} else {
//arm
g.setColor(new Color(153,153,0));
g.fillRect(550, 315, 100, 25);
//linkerarm vingers
g.setColor(new Color(255,237,184));
g.fillOval(530, 310, 30, 30);
g.fillOval(515, 310, 25, 10);
g.fillOval(515, 320, 25, 10);
g.fillOval(515, 330, 25, 10);
g.fillOval(545, 300, 10, 25);
}
}
if (booOpAfbeam) {
if (!booOpAfbeam) {
} else {
g.drawImage(image1, 500, 100, null);
}
}
}
private void ImageIcon(String string) {
// TODO Auto-generated method stub
}
class InvoervakHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
String strAantal = invoerAantal.getText();
intAantal = Integer.parseInt(strAantal);
strKleur= invoerK.getText();
repaint();
}
}
class InvoervakHandler2 implements ActionListener {
public void actionPerformed(ActionEvent f){
strBril= invoerB.getText();
repaint();
}
}
public class aanuit implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
if (booOpAf == true) {
booOpAf = false;
} else {
booOpAf = true;
}
repaint();
}
}
public class beam implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
if (booOpAfbeam == true) {
booOpAfbeam = false;
} else {
booOpAfbeam = true;
}
repaint();
}
}
}
I cant verify your complete code. so better ensure that u have imported the image to the project(else u wont get the image if the image is not in the location specified). and also check if the image is in the src, u need to specify "/" and the image name. to locate the image.
I suggest the best way is to create a label,the right click and take the property of the image and select the image which u wants to display. rest of the codes netbeans will take care of.
Sorry if i made any mistake.
Try this:
Add another panel and then upload image on that panel.
lblImage = new javax.swing.JLabel();
lblImage.setIcon(new javax.swing.ImageIcon("E:..path...png));