git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1936 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
		
			
				
	
	
		
			79 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
package jpl.test;
 | 
						|
 | 
						|
/**
 | 
						|
 * CelsiusConverter.java is a 1.4 application that 
 | 
						|
 * demonstrates the use of JButton, JTextField and
 | 
						|
 * JLabel.  It requires no other files.
 | 
						|
 */
 | 
						|
import java.awt.*;
 | 
						|
import java.awt.event.*;
 | 
						|
import javax.swing.*;
 | 
						|
 | 
						|
public class CelsiusConverter implements ActionListener {
 | 
						|
	JFrame		converterFrame;
 | 
						|
	JPanel		converterPanel;
 | 
						|
	JTextField	tempCelsius;
 | 
						|
	JLabel		celsiusLabel, fahrenheitLabel;
 | 
						|
	JButton		convertTemp;
 | 
						|
	public CelsiusConverter() { // initially locate the window at top-left of desktop
 | 
						|
		this(0, 0);
 | 
						|
	}
 | 
						|
	public CelsiusConverter(int left, int top) { // initially locate the window at top-left of desktop
 | 
						|
		// create and set up the window
 | 
						|
		converterFrame = new JFrame("Convert Celsius to Fahrenheit");
 | 
						|
		converterFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 | 
						|
		converterFrame.setSize(new Dimension(120, 40));
 | 
						|
		converterFrame.setLocation(left, top);
 | 
						|
		// create and set up the panel
 | 
						|
		converterPanel = new JPanel(new GridLayout(2, 2));
 | 
						|
		// create widgets
 | 
						|
		tempCelsius = new JTextField(2);
 | 
						|
		celsiusLabel = new JLabel("Celsius", SwingConstants.LEFT);
 | 
						|
		celsiusLabel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 | 
						|
		//
 | 
						|
		convertTemp = new JButton("Convert");
 | 
						|
		fahrenheitLabel = new JLabel("Fahrenheit", SwingConstants.LEFT);
 | 
						|
		// listen to events from the Convert button
 | 
						|
		convertTemp.addActionListener(this);
 | 
						|
		// add the widgets to the container
 | 
						|
		converterPanel.add(tempCelsius);
 | 
						|
		converterPanel.add(celsiusLabel);
 | 
						|
		converterPanel.add(convertTemp);
 | 
						|
		converterPanel.add(fahrenheitLabel);
 | 
						|
		fahrenheitLabel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 | 
						|
		converterFrame.getRootPane().setDefaultButton(convertTemp); // make "convert" the window's default button
 | 
						|
		// add the panel to the window
 | 
						|
		converterFrame.getContentPane().add(converterPanel, BorderLayout.CENTER);
 | 
						|
		// display the window
 | 
						|
		converterFrame.pack();
 | 
						|
		converterFrame.setVisible(true);
 | 
						|
	}
 | 
						|
	public void actionPerformed(ActionEvent event) {
 | 
						|
		// parse degrees Celsius as a double
 | 
						|
		double tC = (Double.parseDouble(tempCelsius.getText()));
 | 
						|
		//
 | 
						|
		// convert to Fahrenheit (in Java)
 | 
						|
		// int tempFahr = (int) (tC * 1.8 + 32);
 | 
						|
		//
 | 
						|
		// convert to Fahrenheit (in Prolog, via JPL)
 | 
						|
		int tempFahr = ((jpl.Float) jpl.Query.oneSolution("TF is ? * 1.8 + 32", new jpl.Term[] {new jpl.Float(tC)}).get("TF")).intValue();
 | 
						|
		//
 | 
						|
		// display the result
 | 
						|
		fahrenheitLabel.setText(tempFahr + " Fahrenheit");
 | 
						|
	}
 | 
						|
	public static void spawnGUI(final int left, final int top) {
 | 
						|
		// schedule a job for the event-dispatching thread: create and show an instance of this application at (left,top)
 | 
						|
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
 | 
						|
			int x = left;
 | 
						|
			int y = top;
 | 
						|
			public void run() {
 | 
						|
				new CelsiusConverter(x, y); // can we be sure this won't be garbage collected?
 | 
						|
			}
 | 
						|
		});
 | 
						|
	}
 | 
						|
	public static void main(String[] args) {
 | 
						|
		// just for fun, we ask Prolog to start five instances of this class (at stepped offsets from top-left of display)
 | 
						|
		jpl.Query.allSolutions("between(1, 5, N), X is 10*N, Y is 20*N, jpl_call('jpl.test.CelsiusConverter', spawnGUI, [X,Y], _)");
 | 
						|
	}
 | 
						|
}
 |