我在让我的 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