2014-11-22 2 views
0

내 JLabel에서 올바른 출력을 원하는 형식으로 출력하는 데 문제가 있습니다. 라디오 버튼을 선택하면 출력은 보이는 같은 :여러 줄에 문자열을 출력하도록 JLabel을 포맷하는 방법은 무엇입니까?

호세 Locos853 N Glenstone 번가, 스프링 필드, MO 65802 (417) 831-1300 "

임은보고 싶은 것은 같은 얼마나 :

호세 로코

853 N Glenstone 번가, 스프링 필드, MO 65802

(417) 831-1300 "

나는 간단하게 뭔가를 누락 확신 이 문제를 해결하기 위해 나는 단지 내가 잘못하고있는 것을 알아 내기 위해 그것에 손가락을 넣을 수는 없습니다. 도움을 주시면 감사 드리며 시간을내어 도와 주셔서 감사합니다.

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); 
 
    } 
 

 
    }

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 
 

 

+2

당신은 HTML의 텍스트 서식을 시도 할 수 있었다, [예] (http://stackoverflow.com/questions/14737810/jlabel-show-longer-text-as-multiple-lines/14738193#14738193) 또는 편집 할 수없는 텍스트 영역을 사용하십시오. – MadProgrammer

답변

0

스윙 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 
관련 문제