Im having a problem with my GuiTest class. Here is the error,"Error: Main method not found in class GUITest, please define the main method as: public static void main(String[] args) or a JavaFX application class must extend javafx.application.Application". How could I fix this problem?
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
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;
//Here i modified this class to add button and implement its action listener.
public class GUITest {
static class buttonlistener implements ActionListener
{
JFrame l1 ;
buttonlistener(JFrame l1)
{
this.l1 = l1;
public static void main(String[] args){
final JFrame f=new JFrame();
f.setLayout(new BorderLayout());
f.add(new PatternPanel());
f.setSize(500,500);
f.setVisible(true);
f.setBackground(Color.CYAN);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
JButton b1 = new JButton("change color");
b1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae)
{
f.setLayout(new BorderLayout());
f.add(new CircleTile());
f.setSize(500,500);
f.setVisible(true);
f.setBackground(Color.CYAN);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
repaint();
}
});
;
buttonPanel.add(b1);
f.add(buttonPanel,BorderLayout.SOUTH);
}
}
protected void repaint() {
// TODO Auto-generated method stub
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}
}
import java.awt.Graphics;
`` import java.awt.Color;
import javax.swing.*;
import java.awt.Graphics2D;
public class PatternPanel extends JPanel {
int i,j,x,y;
@Override
public void paint(Graphics g){
Graphics2D g1=(Graphics2D)g;
g1.setColor(Color.GREEN);
g1.fillRect(0,0,100,100);
g1.drawRect(0,0,100,100);
g1.setColor(Color.BLACK);
g1.drawOval(0,0,100,100);
g1.setColor(Color.YELLOW);
g1.fillOval(0,0,100,100);
g1.setColor(Color.BLACK);
g1.drawOval(10,10,80,80);
g1.drawOval(20,20,60,60);
g1.drawOval(30,30,40,40);
g1.drawOval(40,40,20,20);
g1.drawLine(50,0,50,100);
g1.drawLine(0,50,100,50);
for(i=0;i<3;i++){
x=0 + 50*i;
g1.drawLine(x,0,x,0+100);
}
for(i=0;i<3;i++){
y=0 + 50*i;
g1.drawLine(0,y,0+100,y);
}
//2nd Block
g1.setColor(Color.GREEN);
g1.fillRect(10,120,120,120);
g1.drawRect(10,120,120,120);
for(i=0;i<5;i++){
y=120 + 24*i;
for(j=0;j<5;j++){
x=10 + 24*j;
g1.setColor(Color.BLACK);
g1.drawOval(x,y,24,24);
g1.setColor(Color.YELLOW);
g1.fillOval(x,y,24,24);
g1.setColor(Color.BLACK);
g1.drawOval(x + 3,y + 3,18,18);
g1.drawOval(x + 6,y + 6,12,12);
g1.drawOval(x + 9,y + 9,6,6);
}
}
for(i=0;i<11;i++){
x=10 + 12*i;
g1.drawLine(x,120,x,120+120);
}
for(i=0;i<11;i++){
y=120 + 12*i;
g1.drawLine(10,y,10+120,y);
}
//3rd Block
g1.setColor(Color.GREEN);
g1.fillRect(150,20,240,240);
g1.drawRect(150,20,240,240);
for(i=0;i<6;i++){
y=20 + 40*i;
for(j=0;j<6;j++){
x=150 + 40*j;
g1.setColor(Color.BLACK);
g1.drawOval(x,y,40,40);
g1.setColor(Color.YELLOW);
g1.fillOval(x,y,40,40);
g1.setColor(Color.BLACK);
g1.drawOval(x + 4,y + 4,32,32);
g1.drawOval(x + 8,y + 8,24,24);
g1.drawOval(x + 12,y + 12,16,16);
g1.drawOval(x + 16,y + 16,8,8);
}
}
for(i=0;i<13;i++){
x=150 + 20*i;
g1.drawLine(x,20,x,20+240);
}
for(i=0;i<13;i++){
y=20 + 20*i;
g1.drawLine(150,y,150+240,y);
}
//4th Block
g1.setColor(Color.GREEN);
g1.fillRect(130,275,108,108);
g1.drawRect(130,275,108,108);
for(i=0;i<3;i++){
y=275 + 36*i;
for(j=0;j<3;j++){
x=130 + 36*j;
g1.setColor(Color.BLACK);
g1.drawOval(x,y,36,36);
g1.setColor(Color.YELLOW);
g1.fillOval(x,y,36,36);
g1.setColor(Color.BLACK);
g1.drawOval(x + 6,y + 6,24,24);
g1.drawOval(x + 12,y + 12,12,12);
}
}
for(i=0;i<7;i++){
x=130 + 18*i;
g1.drawLine(x,275,x,275+108);
}
for(i=0;i<7;i++){
y=275 + 18*i;
g1.drawLine(130,y,130+108,y);
}
}
}
import java.awt.Graphics;
import java.awt.Color;
import javax.swing.*;
import java.awt.Graphics2D;
public class CircleTile extends JPanel {
int i,j,x,y;
@Override
public void paint(Graphics g){
Graphics2D g1=(Graphics2D)g;
g1.setColor(Color.GREEN);
g1.fillRect(0,0,100,100);
g1.drawRect(0,0,100,100);
g1.setColor(Color.BLACK);
g1.drawOval(0,0,100,100);
g1.setColor(Color.YELLOW);
g1.fillOval(0,0,100,100);
g1.setColor(Color.BLACK);
g1.drawOval(10,10,80,80);
g1.drawOval(20,20,60,60);
g1.drawOval(30,30,40,40);
g1.drawOval(40,40,20,20);
g1.drawLine(50,0,50,100);
g1.drawLine(0,50,100,50);
for(i=0;i<3;i++){
x=0 + 50*i;
g1.drawLine(x,0,x,0+100);
}
for(i=0;i<3;i++){
y=0 + 50*i;
g1.drawLine(0,y,0+100,y);
}
//2nd Block
g1.setColor(Color.GRAY);
g1.fillRect(10,120,120,120);
g1.drawRect(10,120,120,120);
for(i=0;i<5;i++){
y=120 + 24*i;
for(j=0;j<5;j++){
x=10 + 24*j;
g1.setColor(Color.BLACK);
g1.drawOval(x,y,24,24);
g1.setColor(Color.YELLOW);
g1.fillOval(x,y,24,24);
g1.setColor(Color.BLACK);
g1.drawOval(x + 3,y + 3,18,18);
g1.drawOval(x + 6,y + 6,12,12);
g1.drawOval(x + 9,y + 9,6,6);
}
}
for(i=0;i<11;i++){
x=10 + 12*i;
g1.drawLine(x,120,x,120+120);
}
for(i=0;i<11;i++){
y=120 + 12*i;
g1.drawLine(10,y,10+120,y);
}
//3rd Block
g1.setColor(Color.BLUE);
g1.fillRect(150,20,240,240);
g1.drawRect(150,20,240,240);
for(i=0;i<6;i++){
y=20 + 40*i;
for(j=0;j<6;j++){
x=150 + 40*j;
g1.setColor(Color.BLACK);
g1.drawOval(x,y,40,40);
g1.setColor(Color.RED);
g1.fillOval(x,y,40,40);
g1.setColor(Color.BLACK);
g1.drawOval(x + 4,y + 4,32,32);
g1.drawOval(x + 8,y + 8,24,24);
g1.drawOval(x + 12,y + 12,16,16);
g1.drawOval(x + 16,y + 16,8,8);
}
}
for(i=0;i<13;i++){
x=150 + 20*i;
g1.drawLine(x,20,x,20+240);
}
for(i=0;i<13;i++){
y=20 + 20*i;
g1.drawLine(150,y,150+240,y);
}
//4th Block
g1.setColor(Color.GRAY);
g1.fillRect(130,275,108,108);
g1.drawRect(130,275,108,108);
for(i=0;i<3;i++){
y=275 + 36*i;
for(j=0;j<3;j++){
x=130 + 36*j;
g1.setColor(Color.BLACK);
g1.drawOval(x,y,36,36);
g1.setColor(Color.PINK);
g1.fillOval(x,y,36,36);
g1.setColor(Color.BLACK);
g1.drawOval(x + 6,y + 6,24,24);
g1.drawOval(x + 12,y + 12,12,12);
}
}
for(i=0;i<7;i++){
x=130 + 18*i;
g1.drawLine(x,275,x,275+108);
}
for(i=0;i<7;i++){
y=275 + 18*i;
g1.drawLine(130,y,130+108,y);
}
}
}
Your main method is buried inside of an inner class's constructor -- why? All you have to do is to fix what the error tells you to fix: Put it in the main outer class, the GUITest class.
Never ignore the compiler error message, and in fact the key to solving this and most compiler errors is to try to read the error message critically and then fix what it tells you to fix. Do this and you'll fix 90% of these types of errors.
Another problem with your code: your indentation is all over the place, is wildly varying, and it is because of this that you don't see what you're doing wrong. If you indented correctly and regularly, you'd quickly see how your main method is deeply embedded in the wrong class. Understand that indentation and formatting rules are not there to make the code look pretty (although it helps do this) but rather is in place to help you better understand and debug your code at a glance.
For instance, if your code were appropriately formatted, you'd find the main method obviously buried deep in indented code:
public class GUITest {
static class buttonlistener implements ActionListener {
JFrame l1 ;
buttonlistener(JFrame l1) {
this.l1 = l1;
// ***** here is your main method, where it does not belong
public static void main(String[] args){
final JFrame f=new JFrame();
f.setLayout(new BorderLayout());
f.add(new PatternPanel());
f.setSize(500,500);
f.setVisible(true);
f.setBackground(Color.CYAN);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
JButton b1 = new JButton("change color");
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
f.setLayout(new BorderLayout());
f.add(new CircleTile());
f.setSize(500,500);
f.setVisible(true);
f.setBackground(Color.CYAN);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
repaint();
}
});
buttonPanel.add(b1);
f.add(buttonPanel,BorderLayout.SOUTH);
}
}
protected void repaint() {
// TODO Auto-generated method stub
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}
}
So fix it:
public class GUITest {
// ***** So move it to where it now does belong
public static void main(String[] args){
final JFrame f=new JFrame();
f.setLayout(new BorderLayout());
f.add(new PatternPanel());
f.setSize(500,500);
f.setVisible(true);
f.setBackground(Color.CYAN);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
JButton b1 = new JButton("change color");
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
f.setLayout(new BorderLayout());
f.add(new CircleTile());
f.setSize(500,500);
f.setVisible(true);
f.setBackground(Color.CYAN);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
repaint();
}
});
;
buttonPanel.add(b1);
f.add(buttonPanel,BorderLayout.SOUTH);
}
static class buttonlistener implements ActionListener {
JFrame l1 ;
buttonlistener(JFrame l1) {
this.l1 = l1;
}
protected void repaint() {
// TODO Auto-generated method stub
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}
}