0

I'm having an issue getting my JLabel to print the correct output out in the format Im wanting. When the radio button is selected the output looks like:

Jose Locos853 N Glenstone Ave, Springfield, MO 65802(417) 831-1300"

How Im wanting it to look is like:

Jose Locos

853 N Glenstone Ave, Springfield, MO 65802

(417) 831-1300"

I'm sure I'm missing something simple to correct this but I just can't put my finger on it to figure out what I'm doing wrong. Any help would be appreciated and thank you in advance for taking time to help me out.

import TrySource.TryWindow;

import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JLabel;

import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Arrays;
import java.util.Random;
import javax.swing.*;


public class TrySomethingNew extends JFrame
{

  // Radio buttons for selecting colors
  private JRadioButton jrbMexican, jrbItalian;
        JLabel jlblResult; 

  // Declare a panel for displaying message
  private TryWindow TryWindow;
  
  //textarea for result
  private JLabel jlblRestaurantName; 


  // Main method
  public static void main(String[] args) 
  {
    TrySomethingNew frame = new TrySomethingNew();
    frame.pack();
    frame.setSize(500,500);
    frame.setTitle("Try Something New");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null); // Center the frame
    frame.setVisible(true);
}

  public TrySomethingNew() 
  {
    // Create a MovingMessageCanvas instance and set colors
    TryWindow = new TryWindow("Let's try this.");
    TryWindow.setBackground(Color.WHITE);

    // Panel to hold radio buttons
    JPanel jpRadioButtons = new JPanel();
    jpRadioButtons.setBorder(new javax.swing.border.TitledBorder("Select A Food Genre"));
    jpRadioButtons.add(jrbMexican = new JRadioButton("Mexican"));
    jpRadioButtons.add(jrbItalian = new JRadioButton("Italian"));


    // Group radio buttons
    ButtonGroup btg = new ButtonGroup();
    btg.add(jrbMexican);
    btg.add(jrbItalian);
    
    //Panel to hold result
    JPanel jpResultPanel = new JPanel();
    jpResultPanel.setBorder(new javax.swing.border.TitledBorder("Result"));    

    // Place panels in the frame
    setLayout(new BorderLayout());
    add(jpRadioButtons, BorderLayout.NORTH);
    add(jpResultPanel, BorderLayout.CENTER);
    

    // Register listeners with the buttons

    jrbMexican.addItemListener(new EventListener());
    jrbItalian.addItemListener(new EventListener());
    
    jlblRestaurantName = new JLabel();
    jpResultPanel.add(jlblRestaurantName);
    jlblRestaurantName.setVisible(true);
 
    
  }//end main

  // Handle radio button selections
  class EventListener implements ItemListener 
  {
      
    public void itemStateChanged(ItemEvent e) 
    {
      if (jrbMexican.isSelected())
      {
        java.util.List<String> mexicanList = Arrays.asList(
        "Jose Locos\n853 N Glenstone Ave, Springfield, MO 65802/n(417) 831-1300",
        "Amigos Mexican Restaurant\n2118 S Campbell Ave, Springfield, MO 65807\n(417) 887-1401");
        
        Random randomizer = new Random();
        String random = mexicanList.get(randomizer.nextInt(mexicanList.size()));
        jlblRestaurantName.setText(random);
        
        
      }//end if jrbMexican isSelected
      
      if (jrbItalian.isSelected())
      {
        java.util.List<String> italianList = Arrays.asList(
        "Zios Italian Kitchen\n1249 E Kingsley St, Springfield, MO 65804\n(417) 889-1919",
        "Bambinos Cafe\n1141 E Delmar St, Springfield, MO 65807\n(417) 862-9999");
        
        Random randomizer = new Random();
        String random = italianList.get(randomizer.nextInt(italianList.size()));
        jlblRestaurantName.setText(random);
        
      }//end if jrbItalian isSelected
    }//end itemStateChanged
  }//end eventListener
}//end TrySomethingNew

    

package TrySource;

// TryWindow.java: Display a message on a JPanel
import java.awt.FontMetrics;
import java.awt.Graphics;
import javax.swing.JPanel;

public class TryWindow extends JPanel 
{
  /** The message to be displayed */
  private String message = "Try Something New";

  /** The x coordinate where the message is displayed */
  private int xCoordinate = 465;

  /** The y coordinate where the message is displayed */
  private int yCoordinate = 40;

  /** Indicate whether the message is displayed in the center */
  private boolean centered;

  /** The interval for moving the message horizontally and vertically */
  private int interval = 10;

  /** Default constructor */
  public TryWindow() 
  {
      
  }

  /** Constructor with a message parameter */
  public TryWindow(String message) 
  {
    this.message = message;
  }

  /** Return message */
  public String getMessage() 
  {
    return message;
  }

  /** Set a new message */
  public void setMessage(String message) 
  {
    this.message = message;
    repaint();
  }

  /** Return xCoordinator */
  public int getXCoordinate() 
  {
    return xCoordinate;
  }

  /** Set a new xCoordinator */
  public void setXCoordinate(int x) 
  {
    this.xCoordinate = x;
    repaint();
  }

  /** Return yCoordinator */
  public int getYCoordinate() 
  {
    return yCoordinate;
  }

  /** Set a new yCoordinator */
  public void setYCoordinate(int y) 
  {
    this.yCoordinate = y;
    repaint();
  }

  /** Return centered */
  public boolean isCentered() 
  {
    return centered;
  }

  /** Set a new centered */
  public void setCentered(boolean centered) 
  {
    this.centered = centered;
    repaint();
  }

  /** Return interval */
  public int getInterval() 
  {
    return interval;
  }

  /** Set a new interval */
  public void setInterval(int interval) 
  {
    this.interval = interval;
    repaint();
  }

  @Override
  protected void paintComponent(Graphics g) 
  {
    super.paintComponent(g);

    if (centered) 
    {
      // Get font metrics for the current font
      FontMetrics fm = g.getFontMetrics();

      // Find the center location to display
      int stringWidth = fm.stringWidth(message);
      int stringAscent = fm.getAscent();
      // Get the position of the leftmost character in the baseline
      xCoordinate = getWidth() / 2 - stringWidth / 2;
      yCoordinate = getHeight() / 2 + stringAscent / 2;
    }

    g.drawString(message, xCoordinate, yCoordinate);
  }

  }
MadProgrammer
  • 343,457
  • 22
  • 230
  • 366
Butters573
  • 37
  • 1
  • 5
  • 2
    You could try formatting the text in HTML, [for example](http://stackoverflow.com/questions/14737810/jlabel-show-longer-text-as-multiple-lines/14738193#14738193) or use a non-editable text area – MadProgrammer Nov 22 '14 at 00:06

1 Answers1

0

Swing JLabels have long supported embedding simple html into them. So if you replace the \n with <br> and surround the entire string with <html></html> you'll get the result you're looking for. See sample code below.

  // Handle radio button selections
  class EventListener implements ItemListener 
  {

    public void itemStateChanged(ItemEvent e) 
    {
      if (jrbMexican.isSelected())
      {
        java.util.List<String> mexicanList = Arrays.asList(
        "<html>Jose Locos<br>853 N Glenstone Ave, Springfield, MO 65802<br>(417) 831-1300</html>",
        "<html>Amigos Mexican Restaurant<br>2118 S Campbell Ave, Springfield, MO 65807<br>(417) 887-1401</html>");

        Random randomizer = new Random();
        String random = mexicanList.get(randomizer.nextInt(mexicanList.size()));
        jlblRestaurantName.setText(random);


      }//end if jrbMexican isSelected

      if (jrbItalian.isSelected())
      {
        java.util.List<String> italianList = Arrays.asList(
         "<html>Zios Italian Kitchen<br>1249 E Kingsley St, Springfield, MO 65804<br>(417) 889-1919<html>",
         "<html>Bambinos Cafe<br>1141 E Delmar St, Springfield, MO 65807<br>(417) 862-9999<html>");

        Random randomizer = new Random();
        String random = italianList.get(randomizer.nextInt(italianList.size()));
        jlblRestaurantName.setText(random);

      }//end if jrbItalian isSelected
    }//end itemStateChanged
  }//end eventListener
Martin Woolstenhulme
  • 3,968
  • 4
  • 24
  • 25