1) Swing (GUI)
- Container: Window & Frame JFrame, FlowLayout (java.awt), and JPanel
- Component: JButton, JLabel, JTextField, JCheckBox, ButtonGroup, JComboBox, JTextArea, JPanel
- title: super("title"); or setTitle("title");
- size: setSize(wide,tall); or pack();
- look and feel: UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); (put this in try-catch)
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- setVisible(true);
import javax.swing.*;
import java.awt.*;public class Playback extends JFrame {public Playback() {super("Playback");setLookAndFeel();setSize(400, 600);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//LayoutFlowLayout flo = new FlowLayout();setLayout(flo);//ButtonsJButton play = new JButton("Play");JButton stop = new JButton("Stop");JButton pause = new JButton("Pause");add(play);add(stop);add(pause);//Label and Text fieldJLabel pageLabel = new JLabel("Web page address: ", JLabel.CENTER);JTextField pageAddress = new JTextField("http://www.java24hours.com",20);JTextField country = new JTextField("US", 20);add(pageLabel);add(pageAddress);add(country);country.setText("Separate Customs Territory of Taiwan, Penghu, Kinmen, " +"and Matsu");//Check BoxJCheckBox jumboSize = new JCheckBox("Jumbo Size", true);add(jumboSize);//ButtonGroupJCheckBox frogLegs = new JCheckBox("Frog Leg Grande", true);JCheckBox fishTacos = new JCheckBox("Fish Taco Platter", false);JCheckBox emuNuggets = new JCheckBox("Emu Nuggets", false);ButtonGroup meals = new ButtonGroup();meals.add(frogLegs);meals.add(fishTacos);meals.add(emuNuggets);add(frogLegs);add(fishTacos);add(emuNuggets);//Combo BoxJComboBox profession = new JComboBox();profession.addItem("Butcher");profession.addItem("Baker");profession.addItem("Candlestick maker");profession.addItem("Fletcher");profession.addItem("Fighter");profession.addItem("Technical writer");profession.setEditable(true);add(profession);//Text AreaJTextArea comments = new JTextArea("I should have been a pair\n " +"of ragged claws.", 3, 25);add(comments);//PanelJPanel topRow = new JPanel();add(topRow);//ClockPanelClockPanel time = new ClockPanel();add(time);setVisible(true);}private void setLookAndFeel() {try {UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");}catch (Exception exc) {//ignore error}}public static void main(String[] arguments) {Playback pb = new Playback();}}
import javax.swing.*;2) containers and components
import java.util.*;
public class ClockPanel extends JPanel {
public ClockPanel() {
super();
String currentTime = getTime();
JLabel time = new JLabel("Time: ");
JLabel current = new JLabel(currentTime);
add(time);
add(current);
}
final String getTime() {
String time;
// get current time and date
Calendar now = Calendar.getInstance();
int hour = now.get(Calendar.HOUR_OF_DAY);
int minute = now.get(Calendar.MINUTE);
int month = now.get(Calendar.MONTH) + 1;
int day = now.get(Calendar.DAY_OF_MONTH);
int year = now.get(Calendar.YEAR);
String monthName = "";
switch (month) {
case (1):
monthName = "January";
break;
case (2):
monthName = "February";
break;
case (3):
monthName = "March";
break;
case (4):
monthName = "April";
break;
case (5):
monthName = "May";
break;
case (6):
monthName = "June";
break;
case (7):
monthName = "July";
break;
case (8):
monthName = "August";
break;
case (9):
monthName = "September";
break;
case (10):
monthName = "October";
break;
case (11):
monthName = "November";
break;
case (12):
monthName = "December";
}
time = monthName + " " + day + ", " + year + " "
+ hour + ":" + minute;
return time;
}
}
- The size of container
- The size of other components and contatiners
- The layout manager that being used
- FlowLayout (java.awt): 线性排列→↓FlowLayout flo = new FlowLayout();
- GridLayout (java.awt): 网格排列GridLayout grid = new GridLayout(2,3);
- BorderLayout (java.awt): 方位排列
BorderLayout border = new BorderLayout();
setLayout(border);
add (component, BoderLayout.NORTH[SOUTH,EAST,WEST,CENTER]);
- BoxLayout: (java.swing): 线性排列↓
2.1) Insets (java.awt): compoents间距JPanel pane = new JPanel();
BoxLayout box = new BoxLayout (pane, BoxLayout.Y_AXIS[X_AXIS]);
pane.setLayout(box);
pane.add(component1);
pane.add(component2);
override container's getInsets();
class KeyViewer:public Insets getInsets(){
Insets around = new Insets(top, left, bottom, right);
return around;
}
import javax.swing.*;class LottotMadness:
import java.awt.event.*;
import java.awt.*;
public class KeyViewer extends JFrame implements KeyListener {
JTextField keyText = new JTextField(80);
JLabel keyLabel = new JLabel("Press any key in the text field.");
KeyViewer() {
super("KeyViewer");
setLookAndFeel();
setSize(350, 100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
keyText.addKeyListener(this);
BorderLayout bord = new BorderLayout();
setLayout(bord);
add(keyLabel, BorderLayout.NORTH);
add(keyText, BorderLayout.CENTER);
setVisible(true);
}
public void keyTyped(KeyEvent input) {
// input can be letters, numbers, or punctuation, including Backspace
char key = input.getKeyChar();
// only showing the currently pressed key.
keyLabel.setText("You pressed " + key);
/* for practice, showing the content in keyText
String label = keyLabel.getText();
label = label.replaceAll("You pressed ", "");
int l = label.length();
label = label.replaceAll("Press any key in the text field.", "");
if (key == KeyEvent.VK_BACK_SPACE){
// Backspace
if (l!=0){
label = label.substring(0,l-1);
}
}
else {
label = label + key;
}
// when we use mouse to delete more than one character.
// actually, we can directly use label = keyText.getText();
if (keyText.getText().length()==0){
label = "";
}
keyLabel.setText("You pressed " + label);
*/
}
public void keyPressed(KeyEvent txt) {
// do nothing
}
public void keyReleased(KeyEvent txt) {
// do nothing
}
private void setLookAndFeel() {
try {
UIManager.setLookAndFeel(
"com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"
);
}
catch (Exception exc) {
// ignore error
}
}
public static void main(String[] arguments) {
KeyViewer frame = new KeyViewer();
}
}
import java.awt.*;3) Listener
import javax.swing.*;
public class LottoMadness extends JFrame {
LottoEvent lotto = new LottoEvent(this);
// set up row 1
JPanel row1 = new JPanel();
ButtonGroup option = new ButtonGroup();
JCheckBox quickpick = new JCheckBox("Quick Pick", false);
JCheckBox personal = new JCheckBox("Personal", true);
// set up row 2
JPanel row2 = new JPanel();
JLabel numbersLabel = new JLabel("Your picks: ", JLabel.RIGHT);
JTextField[] numbers = new JTextField[6];
JLabel winnersLabel = new JLabel("Winners: ", JLabel.RIGHT);
JTextField[] winners = new JTextField[6];
// set up row 3
JPanel row3 = new JPanel();
JButton stop = new JButton("Stop");
JButton play = new JButton("Play");
JButton reset = new JButton("Reset");
// set up row 4
JPanel row4 = new JPanel();
JLabel got3Label = new JLabel("3 of 6: ", JLabel.RIGHT);
JTextField got3 = new JTextField("0");
JLabel got4Label = new JLabel("4 of 6: ", JLabel.RIGHT);
JTextField got4 = new JTextField("0");
JLabel got5Label = new JLabel("5 of 6: ", JLabel.RIGHT);
JTextField got5 = new JTextField("0");
JLabel got6Label = new JLabel("6 of 6: ", JLabel.RIGHT);
JTextField got6 = new JTextField("0", 10);
JLabel drawingsLabel = new JLabel("Drawings: ", JLabel.RIGHT);
JTextField drawings = new JTextField("0");
JLabel yearsLabel = new JLabel("Years: ", JLabel.RIGHT);
JTextField years = new JTextField();
public LottoMadness() {
super("Lotto Madness");
setLookAndFeel();
setSize(550, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridLayout layout = new GridLayout(5, 1, 10, 10);
setLayout(layout);
// Add listeners
quickpick.addItemListener(lotto);
personal.addItemListener(lotto);
stop.addActionListener(lotto);
play.addActionListener(lotto);
reset.addActionListener(lotto);
FlowLayout layout1 = new FlowLayout(FlowLayout.CENTER,
10, 10);
option.add(quickpick);
option.add(personal);
row1.setLayout(layout1);
row1.add(quickpick);
row1.add(personal);
add(row1);
GridLayout layout2 = new GridLayout(2, 7, 10, 10);
row2.setLayout(layout2);
row2.add(numbersLabel);
for (int i = 0; i < 6; i++) {
numbers[i] = new JTextField();
row2.add(numbers[i]);
}
row2.add(winnersLabel);
for (int i = 0; i < 6; i++) {
winners[i] = new JTextField();
winners[i].setEditable(false);
row2.add(winners[i]);
}
add(row2);
FlowLayout layout3 = new FlowLayout(FlowLayout.CENTER,10, 10);
row3.setLayout(layout3);
stop.setEnabled(false);
row3.add(stop);
row3.add(play);
row3.add(reset);
add(row3);
GridLayout layout4 = new GridLayout(2, 3, 20, 10);
row4.setLayout(layout4);
row4.add(got3Label);
got3.setEditable(false);
row4.add(got3);
row4.add(got4Label);
got4.setEditable(false);
row4.add(got4);
row4.add(got5Label);
got5.setEditable(false);
row4.add(got5);
row4.add(got6Label);
got6.setEditable(false);
row4.add(got6);
row4.add(drawingsLabel);
drawings.setEditable(false);
row4.add(drawings);
row4.add(yearsLabel);
years.setEditable(false);
row4.add(years);
add(row4);
setVisible(true);
}
private void setLookAndFeel() {
try {
UIManager.setLookAndFeel(
"com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"
);
}
catch (Exception exc) {
// ignore error
}
}
public static void main(String[] arguments) {
LottoMadness frame = new LottoMadness();
}
}
- import java.awt.event.*
- public class Graph implements ActionListener, MouseListener
- component.addActionListener(this)
- public void actioniPerformed(ActionEvent event){};
- Check Box and ComboBox Events: ItemListener
- Keyboard Events: KeyListener
- Enabling and Disabling: setEnabled(true|false);
import javax.swing.*;4) Scroll Panes
import java.awt.event.*;
public class LottoEvent implements ItemListener, ActionListener, Runnable {
LottoMadness gui;
Thread playing;
public LottoEvent(LottoMadness in) {
gui = in;
}
public void actionPerformed(ActionEvent event) {
String command = event.getActionCommand();
if (command.equals("Play")) {
startPlaying();
}
if (command.equals("Stop")) {
stopPlaying();
}
if (command.equals("Reset")) {
clearAllFields();
gui.personal.setSelected(true);//debug 01: set quickpick unselected when click Reset.
}
}
void startPlaying() {
playing = new Thread(this);
// debug 02: run the game even when there is/are empty number(s) by quickpick.
if (numberCheckEmpty(gui.numbers)) {
gui.personal.doClick();
gui.quickpick.doClick();
}
playing.start();
gui.play.setEnabled(false);
gui.stop.setEnabled(true);
gui.reset.setEnabled(false);
gui.quickpick.setEnabled(false);
gui.personal.setEnabled(false);
}
void stopPlaying() {
gui.stop.setEnabled(false);
gui.play.setEnabled(true);
gui.reset.setEnabled(true);
gui.quickpick.setEnabled(true);
gui.personal.setEnabled(true);
playing = null;
}
void clearAllFields() {
for (int i = 0; i < 6; i++) {
gui.numbers[i].setText(null);
gui.winners[i].setText(null);
}
gui.got3.setText("0");
gui.got4.setText("0");
gui.got5.setText("0");
gui.got6.setText("0");
gui.drawings.setText("0");
gui.years.setText("0");
}
public void itemStateChanged(ItemEvent event) {
Object item = event.getItem();
if (item == gui.quickpick) {
for (int i = 0; i < 6; i++) {
int pick;
do {
pick = (int) Math.floor(Math.random() * 50 + 1);
} while (numberGone(pick, gui.numbers, i));
gui.numbers[i].setText("" + pick);
}
}
else {
for (int i = 0; i < 6; i++) {
gui.numbers[i].setText(null);
}
}
}
void addOneToField(JTextField field) {
int num = Integer.parseInt("0" + field.getText());//// it is very necessary to add "0" ?
num++;
field.setText("" + num);
}
boolean numberGone(int num, JTextField[] pastNums, int count) {
for (int i = 0; i < count; i++) {
if (Integer.parseInt(pastNums[i].getText()) == num) {
return true;
}
}
return false;
}
// debug 02: run the game even when there is/are empty number(s) by quickpick.
boolean numberCheckEmpty(JTextField[] number) {
int i = 0;
while (i < 6) {
if (number[i].getText().isEmpty()) {
return true;
}
i++;
}
return false;
}
boolean matchedOne(JTextField win, JTextField[] allPicks) {
for (int i = 0; i < 6; i++) {
String winText = win.getText();
if ( winText.equals( allPicks[i].getText() ) ) {
return true;
}
}
return false;
}
public void run() {
Thread thisThread = Thread.currentThread();
while (playing == thisThread) {
addOneToField(gui.drawings);
int draw = Integer.parseInt(gui.drawings.getText());
float numYears = (float)draw / 104;
gui.years.setText("" + numYears);
int matches = 0;
for (int i = 0; i < 6; i++) {
int ball;
do {
ball = (int) Math.floor(Math.random() * 50 + 1);
} while (numberGone(ball, gui.winners, i));
gui.winners[i].setText("" + ball);
if (matchedOne(gui.winners[i], gui.numbers)) {
matches++;
}
}
switch (matches) {
case 3:
addOneToField(gui.got3);
break;
case 4:
addOneToField(gui.got4);
break;
case 5:
addOneToField(gui.got5);
break;
case 6:
addOneToField(gui.got6);
gui.stop.setEnabled(false);
gui.play.setEnabled(true);
playing = null;
}
try {
Thread.sleep(100);
}
catch (InterruptedException e) {
// do nothing
}
}
}
}
JScroolPane()|(int, int)|(component)|(component, int, int)|
(component, JScrollPane.VERTICAL[|HORIZONTAL]_SCROLLBAR_ALWAYS[|NERVER|ALWAYS])
class MailWriter()
import javax.swing.*;5) Sliders
import java.awt.*;
public class MailWriter extends JFrame {
public MailWriter() {
super("Write an E-Mail");
setLookAndFeel();
setSize(370, 270);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
FlowLayout flow = new FlowLayout(FlowLayout.RIGHT);
setLayout(flow);
JPanel row1 = new JPanel();
JLabel toLabel = new JLabel("To:");
row1.add(toLabel);
JTextField to = new JTextField(24);
row1.add(to);
add(row1);
JPanel row2 = new JPanel();
JLabel subjectLabel = new JLabel("Subject:");
row2.add(subjectLabel);
JTextField subject = new JTextField(24);
row2.add(subject);
add(row2);
JPanel row3 = new JPanel();
JLabel messageLabel = new JLabel("Message:");
row3.add(messageLabel);
JTextArea message = new JTextArea(4, 22);
//the aim of these two command lines is to wrap.
message.setLineWrap(true);
message.setWrapStyleWord(true);
//***********************************
JScrollPane scroll = new JScrollPane(message,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER
);
row3.add(scroll);
add(row3);
JPanel row4 = new JPanel();
JButton send = new JButton("Send");
row4.add(send);
add(row4);
setVisible(true);
}
private void setLookAndFeel() {
try {
UIManager.setLookAndFeel(
"com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"
);
}
catch (Exception exc) {
// ignore error
}
}
public static void main(String[] arguments) {
MailWriter mail = new MailWriter();
}
}
JSliders()|(min, max)|(min,max,start)
.VERTICAL[|HORIZONTAL]
.setMajorTickSpacing(int)
.setMinorTickSpacing(int)
.setPaintTicks(boolean)
.setPaintLabels(boolean)
ChangeListener
class ColorSlider()
import javax.swing.*;6) Image Icons and Toolbars
import javax.swing.event.*;
import java.awt.*;
public class ColorSliders extends JFrame implements ChangeListener {
ColorPanel canvas;
JSlider red;
JSlider green;
JSlider blue;
public ColorSliders() {
super("Color Slide");
setLookAndFeel();
setSize(270, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
canvas = new ColorPanel();
red = new JSlider(0, 255, 255);
green = new JSlider(0, 255, 0);
blue = new JSlider(0, 255, 0);
red.setMajorTickSpacing(50);
red.setMinorTickSpacing(10);
red.setPaintTicks(true);
red.setPaintLabels(true);
red.addChangeListener(this);
green.setMajorTickSpacing(50);
green.setMinorTickSpacing(10);
green.setPaintTicks(true);
green.setPaintLabels(true);
green.addChangeListener(this);
blue.setMajorTickSpacing(50);
blue.setMinorTickSpacing(10);
blue.setPaintTicks(true);
blue.setPaintLabels(true);
blue.addChangeListener(this);
JLabel redLabel = new JLabel("Red: ");
JLabel greenLabel = new JLabel("Green: ");
JLabel blueLabel = new JLabel("Blue: ");
GridLayout grid = new GridLayout(4, 1);
FlowLayout right = new FlowLayout(FlowLayout.RIGHT);
setLayout(grid);
JPanel redPanel = new JPanel();
redPanel.setLayout(right);
redPanel.add(redLabel);
redPanel.add(red);
add(redPanel);
JPanel greenPanel = new JPanel();
greenPanel.setLayout(right);
greenPanel.add(greenLabel);
greenPanel.add(green);
add(greenPanel);
JPanel bluePanel = new JPanel();
bluePanel.setLayout(right);
bluePanel.add(blueLabel);
bluePanel.add(blue);
add(bluePanel);
add(canvas);
setVisible(true);
}
public void stateChanged(ChangeEvent event) {
JSlider source = (JSlider) event.getSource();
if (source.getValueIsAdjusting() != true) {
Color current = new Color(red.getValue(),green.getValue(),blue.getValue());
canvas.changeColor(current);
canvas.repaint();
}
}
public Insets getInsets() {
Insets border = new Insets(45, 10, 10, 10);
return border;
}
private void setLookAndFeel() {
try {
UIManager.setLookAndFeel(
"com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"
);
}
catch (Exception exc) {
// ignore error
}
}
public static void main(String[] arguments) {
ColorSliders cs = new ColorSliders();
}
}
class ColorPanel extends JPanel {
Color background;
ColorPanel() {
background = Color.red;
}
// paint "The current Color object" ********
public void paintComponent(Graphics comp) {
Graphics2D comp2D = (Graphics2D) comp;
comp2D.setColor(background);
comp2D.fillRect(0, 0, getSize().width, getSize().height);
}
//******************************************
void changeColor(Color newBackground) {
background = newBackground;
}
}
ImageIcon imageIcon = new ImageIcon(fileName);
Only for gif, jpeg, png.
7) java API
http://docs.oracle.com/javase/7/docs/api/
8) JApplet
- init(); start();
- paint();
- stop();
- start();
- destroy();
width=”400”>
<p>Sorry, no dice ... this requires a Java-enabled browser.</p>
</applet>
应当如此设置,加不加引号无所谓:
<object type="application/x-java-applet">
<param name="code" value="java24h13to17GUI.WeightScale" />
<param name="codebase" value="../../bin/" />
<p>Sorry, no dice ... this requires a Java-enabled browser.</p>
</object>
or
<applet
code=java24h18to24.LinkRotator.class
codebase=../../bin/
width="200" height="200"
>
</applet>
No comments:
Post a Comment