2014-11-23 3 views
0

라디오 버튼을 선택하면 프로그램에서 임의의 레스토랑을 표시합니다. 지금 내가하고 싶은 것은 라디오 버튼이 선택되었을 때 나타나는 텍스트 아래에 레스토랑 로고 이미지가 나타납니다. 임씨는 내가해야 할 일이나 내가 이것을 달성하는 방법에 대한 정보를 찾을 필요가있는 곳인지 정말로 모르겠습니다. 시간과 도움을 미리 보내 주셔서 감사합니다. 먼저목록 항목에 해당하는 .jpg 이미지를 어떻게 추가합니까?

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(
 
     "<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 
 
}//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); 
 
    } 
 

 
    }

+0

'텍스트 아래에 로고가 나타납니다. '텍스트를 표시하기 위해 무엇을 사용 했습니까? JLabel? JTextField? – user3437460

답변

0

, 당신은 레스토랑에 대한 정보를 저장하기위한 모델 클래스를 만듭니다.

package com.ggl.testing; 

import java.awt.Image; 

public class Restaurant { 

    private final Image image; 

    private final RestaurantType restaurantType; 

    private final String name; 
    private final String address; 
    private final String phoneNumber; 

    public Restaurant(Image image, RestaurantType restaurantType, String name, 
      String address, String phoneNumber) { 
     this.image = image; 
     this.restaurantType = restaurantType; 
     this.name = name; 
     this.address = address; 
     this.phoneNumber = phoneNumber; 
    } 

    public Image getImage() { 
     return image; 
    } 

    public String getName() { 
     return name; 
    } 

    public String getAddress() { 
     return address; 
    } 

    public String getPhoneNumber() { 
     return phoneNumber; 
    } 

    public RestaurantType getRestaurantType() { 
     return restaurantType; 
    } 

    public enum RestaurantType { 
     MEXICAN, ITALIAN 
    } 

} 

다음으로 레스토랑 클래스를 사용하도록 코드를 수정합니다.

레스토랑 목록을 정의하십시오.

private List<Restaurant> restaurants = new ArrayList<>(); 

다음으로 식당 정보를 추가하십시오.

Restaurant restaurant1 = new Restaurant(image, RestaurantType.MEXICAN, 
      "Jose Locos", "853 N Glenstone Ave, Springfield, MO 65802", 
      "(417) 831-1300"); 
    restaurants.add(restaurant1); 
    ... 

마지막으로 레스토랑 목록을 사용하도록 itemStateChanged 메소드를 수정하십시오.

Java 프로젝트에서 이미지를 읽어야합니다. 이를 수행하는 한 가지 방법이 있습니다.

private Image getImage(String fileName) { 
    try { 
     return ImageIO.read(getClass().getResourceAsStream(fileName)); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 

이미지를 Java 소스 코드와 동일한 디렉토리에 저장하십시오. 그런 식으로 파일의 이름을 getImage 메소드에 전달합니다. 경로 문자열은 필요하지 않습니다.

GUI를 구성하기 전에 모든 이미지를 읽으십시오. 이미지를 한 번만 읽으면됩니다.

관련 문제