2 * Copyright (c) 2007 Yahoo! Inc. All rights reserved.
3 * See accompanying LICENSE file.
5 package com
.yahoo
.pig
.tools
.streams
;
8 * StreamGenerator.java is a 1.4 application that
9 * demonstrates the use of JButton, JTextField and
10 * JLabel. It requires no other files.
14 import java
.awt
.event
.*;
15 import java
.io
.BufferedWriter
;
16 import java
.io
.PrintWriter
;
17 import java
.util
.Random
;
21 public class StreamGenerator
implements ActionListener
{
22 JFrame generatorFrame
;
23 JPanel generatorPanel
;
24 JTextField fileField
, formatField
, numberField
;
25 JLabel fileLabel
, formatLabel
, numberLabel
;
26 JButton generateButton
;
27 PrintWriter out
= null;
29 Random random
= new Random();
31 public StreamGenerator() {
32 //Create and set up the window.
33 generatorFrame
= new JFrame("Stream Generator");
34 generatorFrame
.setDefaultCloseOperation(JFrame
.EXIT_ON_CLOSE
);
35 generatorFrame
.setSize(new Dimension(120, 40));
37 //Create and set up the panel.
38 generatorPanel
= new JPanel(new GridLayout(4, 4));
43 //Set the default button.
44 generatorFrame
.getRootPane().setDefaultButton(generateButton
);
46 //Add the panel to the window.
47 generatorFrame
.getContentPane().add(generatorPanel
, BorderLayout
.CENTER
);
50 generatorFrame
.pack();
51 generatorFrame
.setVisible(true);
55 * Create and add the widgets.
57 private void addWidgets() {
59 fileField
= new JTextField(10);
60 formatField
= new JTextField(10);
61 numberField
= new JTextField(5);
62 fileLabel
= new JLabel("File", SwingConstants
.LEFT
);
63 generateButton
= new JButton("Generate");
64 formatLabel
= new JLabel("Format", SwingConstants
.LEFT
);
65 numberLabel
= new JLabel("Number of tuples", SwingConstants
.LEFT
);
67 //Listen to events from the Convert button.
68 generateButton
.addActionListener(this);
70 //Add the widgets to the container.
71 generatorPanel
.add(fileLabel
);
72 generatorPanel
.add(fileField
);
73 generatorPanel
.add(formatLabel
);
74 generatorPanel
.add(formatField
);
75 generatorPanel
.add(numberLabel
);
76 generatorPanel
.add(numberField
);
77 generatorPanel
.add(generateButton
);
80 fileLabel
.setBorder(BorderFactory
.createEmptyBorder(5,5,5,5));
81 formatLabel
.setBorder(BorderFactory
.createEmptyBorder(5,5,5,5));
84 public void actionPerformed(ActionEvent event
) {
89 String fileName
= fileField
.getText();
90 String format
= formatField
.getText();
91 out
= new PrintWriter(fileName
);
92 String
[] formats
= format
.split(",");
93 this.formats
= new int[formats
.length
];
94 for (int i
=0; i
<formats
.length
; i
++){
95 this.formats
[i
] = (int)Math
.pow(10,Integer
.parseInt(formats
[i
]));
98 new Dialog(generatorFrame
,"Input not well formed");
102 fileField
.setEditable(false);
103 formatField
.setEditable(false);
110 numTuples
= Integer
.parseInt(numberField
.getText());
112 new Dialog(generatorFrame
,"Input not well formed");
115 for (int i
=0; i
<numTuples
; i
++){
116 for (int j
=0; j
<formats
.length
; j
++){
117 out
.print(random
.nextInt(formats
[j
]));
118 if (j
==formats
.length
-1)
130 * Create the GUI and show it. For thread safety,
131 * this method should be invoked from the
132 * event-dispatching thread.
134 private static void createAndShowGUI() {
135 //Make sure we have nice window decorations.
136 JFrame
.setDefaultLookAndFeelDecorated(true);
138 StreamGenerator converter
= new StreamGenerator();
141 public static void main(String
[] args
) {
142 //Schedule a job for the event-dispatching thread:
143 //creating and showing this application's GUI.
144 javax
.swing
.SwingUtilities
.invokeLater(new Runnable() {