-2

Can someone guide me on how can I combine these two classes into one file? One is a constructor class and the other one is a main.

Thanks;

Main Class:

public class JHelloDemo
{
   public static void main(String[] args)
   {
      JHelloFrame frame = new JHelloFrame();
      frame.setVisible(true);
   }
}

Constructor class:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class JHelloFrame extends JFrame implements ActionListener{
   JLabel question = new JLabel("What is your name?");
   Font bigFont = new Font("Arial", Font.BOLD, 16);
   JTextField answer = new JTextField(10);
   JButton pressMe = new JButton("Press me");
   JLabel greeting = new JLabel("");
   final int WIDTH = 275;
   final int HEIGHT = 225;
   public JHelloFrame(){
      super("Hello Frame");
      setSize(WIDTH, HEIGHT);
      setLayout(new FlowLayout());
      question.setFont(bigFont);
      greeting.setFont(bigFont);
      add(question);
      add(answer);
      add(pressMe);
      add(greeting);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      pressMe.addActionListener(this);
      }
   @Override
   public void actionPerformed(ActionEvent e){
      String name = answer.getText();
      String greet = "Hello, " + name;
      greeting.setText(greet);
   }
}

2 Answers2

0
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class JHelloFrame extends JFrame implements ActionListener{
   JLabel question = new JLabel("What is your name?");
   Font bigFont = new Font("Arial", Font.BOLD, 16);
   JTextField answer = new JTextField(10);
   JButton pressMe = new JButton("Press me");
   JLabel greeting = new JLabel("");
   final int WIDTH = 275;
   final int HEIGHT = 225;
   public JHelloFrame(){
      super("Hello Frame");
      setSize(WIDTH, HEIGHT);
      setLayout(new FlowLayout());
      question.setFont(bigFont);
      greeting.setFont(bigFont);
      add(question);
      add(answer);
      add(pressMe);
      add(greeting);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      pressMe.addActionListener(this);
      }
   @Override
   public void actionPerformed(ActionEvent e){
      String name = answer.getText();
      String greet = "Hello, " + name;
      greeting.setText(greet);
   }

   public static void main(String[] args)
   {
      JHelloFrame frame = new JHelloFrame();
      frame.setVisible(true);
   }
}

There you go

Dinh
  • 759
  • 5
  • 16
0

You could simply move the main() method to JHelloFrame, which is the answer to your question. However, your existing design separates concerns, so I would leave it alone.

BTW, you should wrap frame.setVisible(true) in a Runnable and pass it to EventQueue.invokeLater(). See this question for more explanation.

Steve11235
  • 2,849
  • 1
  • 17
  • 18