如何格式化JLabel以在多行上打印字符串?

时间:2014-11-22 00:00:12

标签: java string swing format jlabel

我遇到问题让我的JLabel以我想要的格式打印出正确的输出。选择单选按钮后,输出如下:

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

我希望它看起来像是:

何塞洛克斯

853 N Glenstone Ave,Springfield,MO 65802

(417)831-1300"

我确定我错过了一些简单的方法来纠正这个问题,但我不能指责它来弄清楚我做错了什么。任何帮助将不胜感激,并提前感谢您花时间帮助我。



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

    
&#13;
&#13;
&#13;

&#13;
&#13;
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);
  }

  }
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

Swing JLabels长期以来一直支持在其中嵌入简单的html。因此,如果您将{n替换为<br>并用<html></html>包围整个字符串,您将获得您正在寻找的结果。请参阅下面的示例代码。

  // 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