• 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) {
    
    	}
    }
    
  • 相关阅读:
    boot空间不足
    catkin init/build 遇到catkin:command not found 的解决办法。
    ros自定义消息的时候报错ImportError: No module named em
    Opencv——相机标定
    Spring Boot 怎么打一个可执行 Jar 包?
    代码写成这样,老夫无可奈何!
    在外包干了三年,我废了……不吹不黑!
    国庆加了三天班,公司不给钱,咋办?
    面试官问线程安全的List,看完再也不怕了!
    年轻人的第一个自定义 Spring Boot Starter!
  • 原文地址:https://www.cnblogs.com/denggelin/p/6238684.html
Copyright © 2020-2023  润新知