04747_Java语言程序设计(一)_第6章_图形界面设计(二)

例6.1声明一个面板子类,面板子类对象有3个选择框。

class Panel1 extends JPanel {
	JCheckBox box1, box2, box3;

	Panel1() {
		box1 = new JCheckBox("足球");
		box2 = new JCheckBox("排球");
		box3 = new JCheckBox("篮球");
		add(box1);
		add(box2);
		add(box3);
	}
}

例6.2处理选择项目事件的小应用程序。

import java.applet.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class Panel1 extends JPanel {// 扩展Panel类
	JRadioButton box1, box2, box3;
	ButtonGroup g;

	Panel1() {// 3个单选按钮为一组
		setLayout(new GridLayout(1, 3));
		g = new ButtonGroup();
		box1 = new JRadioButton(MyWindow.fName[0] + "计算机", false);
		box2 = new JRadioButton(MyWindow.fName[1] + "计算机", false);
		box3 = new JRadioButton(MyWindow.fName[2] + "计算机", false);
		g.add(box1);
		g.add(box2);
		g.add(box3);
		add(box1);
		add(box2);
		add(box3);
		add(new JLabel("计算机3选1"));
	}
}

class Panel2 extends JPanel {// 扩展Panel类
	JCheckBox box1, box2, box3;
	ButtonGroup g;

	Panel2() {// 3个选择框为一组
		setLayout(new GridLayout(1, 3));
		g = new ButtonGroup();
		box1 = new JCheckBox("购买1台");
		box2 = new JCheckBox("购买2台");
		box3 = new JCheckBox("购买3台");
		g.add(box1);
		g.add(box2);
		g.add(box3);
		add(box1);
		add(box2);
		add(box3);
		add(new JLabel("选择1、2或3"));
	}
}

class MyWindow extends JFrame implements ItemListener {
	Panel1 panel1;
	Panel2 panel2;
	JLabel label1, label2;
	JTextArea text1, text2;
	static String fName[] = { "HP", "IBM", "DELL" };// 公司名称表
	static double priTbl[][] = { { 1.20, 1.15, 1.10 }, { 1.70, 1.65, 1.60 }, { 1.65, 1.60, 1.58 } };// 产品数量价格对照表
	static int production = -1;// 产品标志

	MyWindow(String s) {
		super(s);
		Container con = this.getContentPane();
		con.setLayout(new GridLayout(3, 2));
		this.setLocation(100, 100);
		this.setSize(400, 100);
		panel1 = new Panel1();
		panel2 = new Panel2();
		label1 = new JLabel("产品介绍", JLabel.CENTER);
		label2 = new JLabel("产品价格", JLabel.CENTER);
		text1 = new JTextArea();
		text2 = new JTextArea();
		con.add(label1);
		con.add(label2);
		con.add(panel1);
		con.add(panel2);
		con.add(text1);
		con.add(text2);
		panel1.box1.addItemListener(this);
		panel1.box2.addItemListener(this);
		panel1.box3.addItemListener(this);
		panel2.box1.addItemListener(this);
		panel2.box2.addItemListener(this);
		panel2.box3.addItemListener(this);
		this.setVisible(true);
		this.pack();
	}

	public void itemStateChanged(ItemEvent e) {
		if (e.getItemSelectable() == panel1.box1) {
			production = 0;
			text1.setText(fName[0] + "公司生产");
			text2.setText("");
		} else if (e.getItemSelectable() == panel1.box2) {
			production = 1;
			text1.setText(fName[1] + "公司生产");
			text2.setText("");
		} else if (e.getItemSelectable() == panel1.box3) {
			production = 2;
			text1.setText(fName[2] + "公司生产");
			text2.setText("");
		} else {
			if (production == -1) {
				return;
			}
			if (e.getItemSelectable() == panel2.box1) {
				text2.setText("" + priTbl[production][0] + "万元/台");
			} else if (e.getItemSelectable() == panel2.box2) {
				text2.setText("" + priTbl[production][1] + "万元/台");
			} else if (e.getItemSelectable() == panel2.box3) {
				text2.setText("" + priTbl[production][2] + "万元/台");
			}
		}
	}
}

public class Example6_2 {
	MyWindow myWin = new MyWindow("选择项目处理示例程序");
}

例6.3小应用程序有两个列表,第一个只允许单选,第二个列表允许多选。

import java.applet.*;
import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;

class MyWindow extends JFrame implements ListSelectionListener {
	JList list1, list2;
	String news[] = { "人民日报", "新民晚报", "浙江日报", "文汇报" };
	String sports[] = { "足球", "排球", "乒乓球", "篮球" };
	JTextArea text;

	MyWindow(String s) {
		super(s);
		Container con = getContentPane();
		con.setBackground(Color.BLUE);
		con.setLayout(new GridLayout(2, 2));
		con.setSize(200, 500);
		list1 = new JList(news);
		list1.setVisibleRowCount(3);
		list1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		list1.addListSelectionListener(this);
		list2 = new JList(sports);
		list2.setVisibleRowCount(2);
		list2.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
		list2.addListSelectionListener(this);
		con.add(list1);
		con.add(list2);
		text = new JTextArea(10, 20);
		con.add(text);
		this.setVisible(true);
		this.pack();
	}

	public void valueChanged(ListSelectionEvent e) {
		if (e.getSource() == list1) {
			text.setText(null);
			Object listValue = ((JList) e.getSource()).getSelectedValue();
			String seleName = listValue.toString();
			for (int i = 0; i < news.length; i++) {
				if (news[i].equals(seleName)) {
					text.append(seleName + ":被选中
");
				}
			}
		} else if (e.getSource() == list2) {
			text.setText(null);
			int tempList[] = list2.getSelectedIndices();// 获得选中索引
			for (int i = 0; i < tempList.length; i++) {
				text.append(sports[tempList[i]] + ":被选中
");
			}
		}
	}
}

public class Example6_3 extends Applet {
	MyWindow myWin = new MyWindow("列表示例");
}

例6.4一个说明组合框用法的应用程序。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Example6_4 {
	public static void main(String[] args) {
		ComboBoxDemo myComboBoxGUI = new ComboBoxDemo();
	}
}

class ComboBoxDemo extends JFrame implements ActionListener, ItemListener {
	public static final int Width = 350;
	public static final int Height = 150;
	String proList[] = { "踢足球", "打篮球", "打排球" };
	JTextField text;
	JComboBox comboBox;

	public ComboBoxDemo() {
		setSize(Width, Height);
		setTitle("组合框使用示意程序");
		Container conPane = getContentPane();
		conPane.setBackground(Color.BLUE);
		conPane.setLayout(new FlowLayout());
		comboBox = new JComboBox(proList);
		comboBox.addActionListener(this);
		comboBox.addItemListener(this);
		comboBox.setEditable(true);
		conPane.add(comboBox);
		text = new JTextField(10);
		conPane.add(text);
		this.setVisible(true);
	}

	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == comboBox) {
			text.setText(comboBox.getSelectedItem().toString());
		}
	}

	public void itemStateChanged(ItemEvent e) {
		if (e.getSource() == comboBox) {
			text.setText(comboBox.getSelectedItem().toString());
		}
	}
}

例6.5小应用程序示意窗口有菜单条的实现方法。

import java.applet.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class MenuWindow extends JFrame implements ActionListener {
	public static JTextField text;

	private void addItem(JMenu menu, String menuName, ActionListener listener) {
		JMenuItem anItem = new JMenuItem(menuName);
		anItem.setActionCommand(menuName);
		anItem.addActionListener(listener);
		menu.add(anItem);
	}

	public MenuWindow(String s, int w, int h) {
		setTitle(s);
		Container con = this.getContentPane();
		con.setLocation(100, 100);
		this.setSize(w, h);
		JMenu menu1 = new JMenu("体育");
		addItem(menu1, "跑步", this);
		addItem(menu1, "跳绳", this);
		addItem(menu1, "打球", this);
		JMenu menu2 = new JMenu("娱乐");
		addItem(menu2, "唱歌", this);
		addItem(menu2, "跳舞", this);
		addItem(menu2, "游戏", this);
		JMenuBar menubar = new JMenuBar();
		text = new JTextField();
		menubar.add(menu1);
		menubar.add(menu2);
		setJMenuBar(menubar);
		con.add(text, BorderLayout.NORTH);
	}

	public void actionPerformed(ActionEvent e) {
		text.setText(e.getActionCommand() + "菜单项被选中!");
	}
}

public class Example6_5 extends Applet implements ActionListener {

	MenuWindow window;
	JButton button;
	boolean bflg;

	public void init() {
		button = new JButton("打开我的体育娱乐之窗");
		bflg = true;
		window = new MenuWindow("体育娱乐之窗", 100, 100);
		button.addActionListener(this);
		add(button);
	}

	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == button) {
			if (bflg) {
				window.setVisible(true);
				bflg = false;
				button.setLabel("关闭我的体育娱乐之窗");
			} else {
				window.setVisible(false);
				bflg = true;
				button.setLabel("打开我的体育娱乐之窗");
			}
		}
	}
}

例6.6小应用程序声明一个用户窗口类和对话框类,用户窗口有两个按钮和两个文本框,当点击某个按钮时,对应的对话框被激活。

import java.applet.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class MyWindow extends JFrame implements ActionListener {
	private JButton button1, button2;
	private static int flg = 0;
	private static JTextField text1, text2;

	MyWindow(String s)// 窗口内有两个按钮
	{
		super(s);
		Container con = this.getContentPane();
		con.setLayout(new GridLayout(2, 2));
		this.setSize(200, 100);
		this.setLocation(100, 100);
		button1 = new JButton("选择水果");
		button2 = new JButton("选择食品");
		button1.addActionListener(this);
		button2.addActionListener(this);
		text1 = new JTextField(20);
		text2 = new JTextField(20);
		con.add(button1);
		con.add(button2);
		con.add(text1);
		con.add(text2);
		this.setVisible(true);
		this.pack();
	}

	public static void returnName(String s) {
		if (flg == 1) {
			text1.setText("选择的水果是:" + s);
		} else if (flg == 2) {
			text2.setText("选择的食品是:" + s);
		}
	}

	public void actionPerformed(ActionEvent e) {
		MyDialog dialog;
		if (e.getSource() == button1) {
			dialog = new MyDialog(this, "水果");
			dialog.setVisible(true);
			flg = 1;
		} else if (e.getSource() == button2) {
			dialog = new MyDialog(this, "食品");
			dialog.setVisible(true);
			flg = 2;
		}
	}
}

class MyDialog extends JDialog implements ActionListener {
	JLabel title;
	JTextField text;
	JButton done;

	MyDialog(JFrame F, String s) {
		super(F, s, true);
		Container con = this.getContentPane();
		title = new JLabel("输入" + s + "名称");
		text = new JTextField(10);
		text.setEditable(true);
		con.setLayout(new FlowLayout());
		con.setSize(200, 100);
		setModal(false);
		done = new JButton("确定");
		done.addActionListener(this);
		con.add(title);
		con.add(text);
		con.add(done);
		con.setVisible(true);
		this.pack();
	}

	public void actionPerformed(ActionEvent e) {
		MyWindow.returnName(text.getText());
		setVisible(false);
		dispose();
	}
}

public class Example6_6 extends Applet {
	MyWindow window;
	MyDialog diaglog;

	public void init()// 程序的主窗口暂没有组件
	{
		window = new MyWindow("带对话框窗口");// 创建一个窗口
	}
}

例6.7应用程序将滚动条作为值的选择。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class MyScrollBar extends JScrollBar {
	public MyScrollBar(int init, int len, int low, int high) {
		super(JScrollBar.HORIZONTAL, init, len, low, high);
	}

	public Dimension getPreferredSize() {
		return new Dimension(125, 20);
	}
}

class MyWindow extends JFrame implements ActionListener, AdjustmentListener {
	private JButton button;
	private JTextField text;
	private boolean barOpened;

	MyWindow(String s) {
		super(s);
		MyScrollBar tempBar = new MyScrollBar(10, 10, 0, 255);
		Container con = this.getContentPane();
		con.setLayout(new GridLayout(2, 1));
		this.setSize(200, 100);
		this.setLocation(100, 100);
		button = new JButton("开/闭滚动条");
		button.addActionListener(this);
		barOpened = false;
		tempBar.addAdjustmentListener(this);
		text = new JTextField("滚动条关闭", 20);
		con.add(button);
		con.add(text);
		con.add(tempBar);
		this.setVisible(true);
		this.pack();
	}

	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == button) {
			if (barOpened) {
				text.setText("滚动条关闭");
			} else {
				text.setText("滚动条打开");
			}
			barOpened = !barOpened;
		}
	}

	public void adjustmentValueChanged(AdjustmentEvent e) {
		if (barOpened) {
			MyScrollBar myBar = (MyScrollBar) e.getAdjustable();
			text.setText("选择的值是:" + myBar.getValue());
		}
	}
}

public class Example6_7 {
	public static void main(String[] args) {
		MyWindow myWindow = new MyWindow("滚动条实例");
	}
}

例6.8小应用程序设置了一个文本区,用于记录一系列鼠标事件。

import java.applet.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

class MyPanel extends JPanel {
	public void print(int r) {
		Graphics g = getGraphics();// 获得系统给予小应用程序的图形对象
		g.clearRect(0, 0, this.getWidth(), this.getHeight());
		g.setColor(Color.red);
		g.fillOval(10, 10, r, r);// 用红色填充一个圆块
	}
}

class MyWindow extends JFrame implements MouseListener {
	JTextArea text;
	MyPanel panel;
	int x, y, r = 10;
	int mouseFlg = 0;
	static String mouseStates[] = { "鼠标键按下", "鼠标松开", "鼠标进来", "鼠标走开", "鼠标双击" };

	MyWindow(String s) {
		super(s);
		Container con = this.getContentPane();
		con.setLayout(new GridLayout(2, 1));
		this.setSize(200, 300);
		this.setLocation(100, 100);
		panel = new MyPanel();
		con.add(panel);
		text = new JTextArea(10, 20);
		text.setBackground(Color.blue);
		con.add(text);
		addMouseListener(this);
		this.setVisible(true);
		this.pack();
	}

	public void paint(Graphics g) {
		r = r + 4;
		if (r > 80) {
			r = 10;
		}
		text.append(mouseStates[mouseFlg] + "了,位置是:" + x + "," + y + "
");
		panel.print(r);
	}

	public void mousePressed(MouseEvent e) {
		x = e.getX();
		y = e.getY();
		mouseFlg = 0;
		repaint();
	}

	public void mouseReleased(MouseEvent e) {
		x = e.getX();
		y = e.getY();
		mouseFlg = 1;
		repaint();
	}

	public void mouseEntered(MouseEvent e) {
		x = e.getX();
		y = e.getY();
		mouseFlg = 2;
		repaint();
	}

	public void mouseExited(MouseEvent e) {
		x = e.getX();
		y = e.getY();
		mouseFlg = 3;
		repaint();
	}

	public void mouseClicked(MouseEvent e) {
		if (e.getClickCount() == 2) {
			x = e.getX();
			y = e.getY();
			mouseFlg = 4;
			repaint();
		} else {

		}
	}
}

public class Example6_8 extends Applet {
	public void init() {
		MyWindow myWindow = new MyWindow("鼠标事件示意程序");
	}
}

例6.9一个滚动条与显示窗口同步变化的应用程序。

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

class MyWindow extends JFrame {
	public MyWindow(String s) {
		super(s);
		Container con = this.getContentPane();
		con.setLayout(new GridLayout());
		this.setLocation(100, 100);
		JScrollBar xAxis = new JScrollBar(JScrollBar.HORIZONTAL, 50, 1, 0, 100);
		JScrollBar yAxis = new JScrollBar(JScrollBar.VERTICAL, 50, 1, 0, 100);
		MyListener listener = new MyListener(xAxis, yAxis, 238, 118);
		JPanel scrolledCanvas = new JPanel();
		scrolledCanvas.setLayout(new BorderLayout());
		scrolledCanvas.add(listener, BorderLayout.CENTER);
		scrolledCanvas.add(xAxis, BorderLayout.SOUTH);
		scrolledCanvas.add(yAxis, BorderLayout.EAST);
		con.add(scrolledCanvas, BorderLayout.CENTER);
		this.setVisible(true);
		this.pack();
	}

	public Dimension getPreferredSize() {
		return new Dimension(500, 300);
	}
}

class MyListener extends JComponent implements MouseListener, MouseMotionListener, AdjustmentListener {
	private int x, y;
	private JScrollBar xScrollBar;
	private JScrollBar yScrollBar;

	private void updateScrollBars(int x, int y) {
		int d;
		d = (int) (((float) x / (float) getSize().width) * 100.0);
		xScrollBar.setValue(d);
		d = (int) (((float) y / (float) getSize().height) * 100.0);
		yScrollBar.setValue(d);
	}

	public MyListener(JScrollBar xaxis, JScrollBar yaxis, int x0, int y0) {
		xScrollBar = xaxis;
		yScrollBar = yaxis;
		x = x0;
		y = y0;
		xScrollBar.addAdjustmentListener(this);
		yScrollBar.addAdjustmentListener(this);
		this.addMouseListener(this);// 监视鼠标点击事件
		this.addMouseMotionListener(this);// 监视鼠标拖动事件
	}

	public void paint(Graphics g) {
		g.setColor(getBackground());
		Dimension size = getSize();
		g.fillRect(0, 0, size.width, size.height);
		g.setColor(Color.blue);
		g.fillRect(x, y, 50, 50);
	}

	public void mouseEntered(MouseEvent e) {

	}

	public void mouseExited(MouseEvent e) {

	}

	public void mouseClicked(MouseEvent e) {

	}

	public void mouseReleased(MouseEvent e) {

	}

	public void mouseMoved(MouseEvent e) {

	}

	public void mousePressed(MouseEvent e) {
		x = e.getX();
		y = e.getY();
		updateScrollBars(x, y);
		repaint();
	}

	public void mouseDragged(MouseEvent e) {
		x = e.getX();
		y = e.getY();
		updateScrollBars(x, y);
		repaint();
	}

	public void adjustmentValueChanged(AdjustmentEvent e) {
		if (e.getSource() == xScrollBar) {
			x = (int) ((float) (xScrollBar.getValue() / 100.0) * getSize().width);
		} else if (e.getSource() == yScrollBar) {
			y = (int) ((float) (yScrollBar.getValue() / 100.0) * getSize().height);
		}
		repaint();
	}
}

public class Example6_9 {
	public static void main(String[] args) {
		MyWindow myWindow = new MyWindow("滚动条示意程序");
	}
}

例6.10小应用程序有一个按钮和一个文本区,按钮作为发生键盘事件的事件源,并对它实施监视。

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class Example6_10 extends Applet implements KeyListener {
	int count = 0;
	Button button = new Button();
	TextArea text = new TextArea(5, 20);

	public void init() {
		button.addKeyListener(this);
		add(button);
		add(text);
	}

	public void keyPressed(KeyEvent e) {
		int t = e.getKeyCode();
		if (t >= KeyEvent.VK_A && t <= KeyEvent.VK_Z) {
			text.append((char) t + " ");
			count++;
			if (count % 10 == 0) {
				text.append("
");
			}
		}
	}

	public void keyTyped(KeyEvent e) {

	}

	public void keyReleased(KeyEvent e) {

	}
}
原文地址:https://www.cnblogs.com/denggelin/p/6238684.html