如何格式化 JLabel 以打印出多行字符串



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

何塞·洛科斯853 N 格伦斯通大道,斯普林菲尔德,密苏里州 65802(417) 831-1300"

我希望它看起来像:

何塞·洛科斯

853 N 格伦斯通大道, 斯普林菲尔德, 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 Locosn853 N Glenstone Ave, Springfield, MO 65802/n(417) 831-1300",
        "Amigos Mexican Restaurantn2118 S Campbell Ave, Springfield, MO 65807n(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 Kitchenn1249 E Kingsley St, Springfield, MO 65804n(417) 889-1919",
        "Bambinos Cafen1141 E Delmar St, Springfield, MO 65807n(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);
  }
  }

Swing JLabels长期以来一直支持将简单的html嵌入其中。因此,如果将 替换为 <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

最新更新