如何将列表字符串传递给JLabel并在JFrame中显示

时间:2014-11-14 15:30:25

标签: java jframe jpanel jlabel

我一直在研究这个程序,我很难将结果显示在弹出的窗口上。程序运行时,我在控制台中显示正确的输出,但是当选择单选按钮时,我需要它显示在单选按钮下的窗口中。在此先感谢,非常感谢任何帮助。

import TrySource.TryWindow;

import java.awt.BorderLayout;
import java.awt.Color;

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;

  // 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(TryWindow, BorderLayout.CENTER);
    add(jpRadioButtons, BorderLayout.NORTH);
    add(jpResultPanel, BorderLayout.CENTER);
    

    // Register listeners with the buttons

    jrbMexican.addItemListener(new EventListener());
    jrbItalian.addItemListener(new EventListener());
    
    
  }//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()));
        System.out.println(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()));
        System.out.println(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);
  }

  }

2 个答案:

答案 0 :(得分:0)

你需要让Textarea像TextArea textArea1 = new TextArea(); 并将其添加到框架中,然后通过调用其setText方法在此区域中显示结果,这样您就可以在结果下的此区域中显示所需信息

答案 1 :(得分:0)

private TextArea textArea1; 

//清除变量

 textArea1 = new TextArea();

//将它放在构造函数

jpResultPanel.add(textArea1);
textArea1.setVisible(true);

将这些行放在后面 //使用按钮注册监听器 和

textArea1.setText(random);

将它放在打印结果的位置。