Professional Documents
Culture Documents
public IsEDTExample() {
JTable table = new JTable(tableModel);
table.setRowHeight(100);
table.setDefaultRenderer(Object.class, new ColorRenderer());
add(table);
}
});
redOption.setSelected(true);
this.threadShade = RED;
add(redOption);
add(greenOption);
add(blueOption);
this.keepRunning = true;
this.colorShadeThread = new Thread(new RandomColorShadeRunnable());
this.colorShadeThread.start();
}
public ColorTableModel() {
for (int i = 0; i < SIZE; i++) {
for (int x = 0; x < SIZE; x++) {
colors[i][x] = Color.white;
}
}
}
if (SwingUtilities.isEventDispatchThread()) {
colors[row][column] = color;
fireTableCellUpdated(row, column);
} else {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
colors[row][column] = color;
fireTableCellUpdated(row, column);
}
});
}
}
}
public ColorRenderer() {
label = new JLabel();
label.setOpaque(true);
label.setPreferredSize(new Dimension(100, 100));
}
f.add(new IsEDTExample());
f.pack();
f.setVisible(true);
}
}
2. GUI clock
import java.applet.Applet;
import java.awt.Graphics;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
g.drawString(dateFormatter.format(date), 5, 10);
}
interface Sleeper {
public void wakeUp();
class AlarmClock {
public AlarmClock() {
for (int i = 0; i < MAX_CAPACITY; i++)
sleepFor[i] = UNUSED;
AlarmThread(int sleeperIndex) {
super();
mySleeper = sleeperIndex;
}
import javax.swing.JFrame;
import javax.swing.JTextField;
public EventThreadFrame() {
Container cp = getContentPane();
cp.add(statusField, BorderLayout.NORTH);
addWindowListener(new WindowAdapter() {
public void windowOpened(WindowEvent e) {
try { // Simulate initialization overhead
Thread.sleep(2000);
} catch (InterruptedException ex) {
throw new RuntimeException(ex);
}
statusField.setText("Initialization complete");
}
});
}
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.util.Random;
import javax.swing.JApplet;
import javax.swing.JFrame;
import javax.swing.JPanel;
super.paintComponent(g);
g.setColor(cColor);
Dimension s = getSize();
g.fillRect(0, 0, s.width, s.height);
}
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(applet);
frame.setSize(width, height);
applet.init();
applet.start();
frame.setVisible(true);
}
} ///:~
5. Write your Beans this way so they can run in a multithreaded environment
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.io.Serializable;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;
public BangBean2() {
addMouseListener(new ML());
addMouseMotionListener(new MM());
}
return fontSize;
}
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(panel);
frame.setSize(width, height);
frame.setVisible(true);
}
} ///:~
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
// Layout . . .
JPanel p = new JPanel();
p.setOpaque(true);
p.setLayout(new FlowLayout());
p.add(good);
p.add(bad);
p.add(bad2);
Container c = f.getContentPane();
c.setLayout(new BorderLayout());
c.add(p, BorderLayout.CENTER);
c.add(resultLabel, BorderLayout.SOUTH);
// Listeners
good.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
resultLabel.setText("Working . . .");
setEnabled(false);
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
}
bad.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
resultLabel.setText("Working . . .");
setEnabled(false);
bad2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
resultLabel.setText("Working . . . ");
setEnabled(false);
resultLabel.setText("Ready");
setEnabled(true);
}
});
}
});
f.setSize(300, 100);
f.setVisible(true);
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public SecondCounterDemo() {
stopB.setEnabled(false); // begin with this disabled
startB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
startB.setEnabled(false);
stopB.setEnabled(true);
stopB.requestFocus();
}
});
stopB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
stopB.setEnabled(false);
sc.stopClock();
startB.setEnabled(true);
startB.requestFocus();
}
});
innerButtonP.add(startB);
innerButtonP.add(stopB);
public SecondCounterRunnable() {
}
int counter = 0;
keepRunning = true;
while (keepRunning) {
try {
Thread.sleep(normalSleepTime);
} catch (InterruptedException x) {
// ignore
}
counter++;
double counterSecs = counter / 10.0;
timeMsg = fmt.format(counterSecs);
arcLen = (((int) counterSecs) % 60) * 360 / 60;
repaint();
}
}
g.setColor(Color.white);
g.fillOval(3, 23, 94, 94);
g.setColor(Color.red);
g.fillArc(2, 22, 96, 96, 90, -arcLen);
}
}
}
8. Thread accuracy: Swing and threads
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.text.DecimalFormat;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public SecondCounterMain() {
stopB.setEnabled(false);
startB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
startB.setEnabled(false);
stopB.setEnabled(true);
stopB.requestFocus();
}
});
stopB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
stopB.setEnabled(false);
sc.stopClock();
startB.setEnabled(true);
startB.requestFocus();
}
});
public SecondCounter() {
}
int counter = 0;
long startTime = System.currentTimeMillis();
keepRunning = true;
while (keepRunning) {
try {
Thread.sleep(nextSleepTime);
} catch (InterruptedException x) {
// ignore
}
counter++;
double counterSecs = counter / 10.0;
double elapsedSecs = (System.currentTimeMillis() - startTime) / 1000.0;
if (nextSleepTime < 0) {
nextSleepTime = 0;
}
repaint();
}
}
g.setColor(Color.white);
g.fillOval(3, 23, 94, 94); // white for unused portion
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
try {
print("sleeping for 3 seconds");
Thread.sleep(3000);
print("about to invokeAndWait()");
SwingUtilities.invokeAndWait(setTextRun);
print("back from invokeAndWait()");
} catch (InterruptedException ix) {
print("interrupted while waiting on invokeAndWait()");
} catch (InvocationTargetException x) {
print("exception thrown from run()");
}
}
}
10. Swing and threads: invoke later
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
try {
print("sleeping for 3 seconds");
Thread.sleep(3000);
} catch (InterruptedException ix) {
print("interrupted while sleeping");
}
print("call invokeLater()");
SwingUtilities.invokeLater(setTextRun);
print("return from invokeLater()");
}
}
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public SlideShow() {
currSlide = 0;
slideSize = new Dimension(50, 50);
buildSlides();
setMinimumSize(slideSize);
setPreferredSize(slideSize);
setMaximumSize(slideSize);
setSize(slideSize);
noStopRequested = true;
Runnable r = new Runnable() {
public void run() {
try {
runWork();
} catch (Exception x) {
x.printStackTrace();
}
}
};
renderHints.put(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
Graphics2D g2 = slide[i].createGraphics();
g2.setRenderingHints(renderHints);
g2.setColor(rectColor);
g2.fillRect(0, 0, slideSize.width, slideSize.height);
g2.setColor(circleColor);
int diameter = 0;
if (i < (slide.length / 2)) {
diameter = 5 + (8 * i);
} else {
diameter = 5 + (8 * (slide.length - i));
}
g2.setColor(Color.black);
g2.drawRect(0, 0, slideSize.width - 1, slideSize.height - 1);
g2.dispose();
}
}
p.add(ss);
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
setMinimumSize(imageSize);
setPreferredSize(imageSize);
setMaximumSize(imageSize);
setSize(imageSize);
noStopRequested = true;
Runnable r = new Runnable() {
public void run() {
try {
runWork();
} catch (Exception x) {
x.printStackTrace();
}
}
};
renderHints.put(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
Graphics2D g2 = image.createGraphics();
g2.setRenderingHints(renderHints);
g2.setColor(Color.white);
g2.fillRect(0, 0, imageSize.width, imageSize.height);
g2.setColor(Color.blue);
tl.draw(g2, 0, baselineOffset);
// draw outline
g.setColor(Color.black);
g.drawRect(0, 0, imageSize.width - 1, imageSize.height - 1);
import javax.swing.JComponent;
import javax.swing.JFrame;
noStopRequested = true;
Runnable r = new Runnable() {
public void run() {
try {
runWork();
} catch (Exception x) {
// in case ANY exception slips through
x.printStackTrace();
}
}
};
internalThread.start();
}
private Image[] buildImages(int width, int height, Color color, int count) {
Graphics2D g2 = im[i].createGraphics();
g2.setColor(color);
g2.fill(shape);
g2.dispose();
}
return im;
}
try {
Thread.sleep(msPerFrame);
} catch (InterruptedException x) {
Thread.currentThread().interrupt();
}
}
}
f.setSize(450, 250);
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}