《Java编程语言:原理与范例》课后实验源代码 下载本文

import java.awt.Color; import java.awt.Container; import java.awt.Graphics;

import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent;

import javax.swing.JFrame;

// 鼠标按下和拖曳事件监听器

class MyMouserListener2 extends MouseAdapter { private int x1, y1; // 按下坐标 private int x2, y2; // 拖曳坐标 private Container canvas; // 画布区域 public MyMouserListener2(Container canvas) { this.canvas = canvas; } // 按下 public void mousePressed(MouseEvent e) { x1 = e.getX(); y1 = e.getY(); } // 拖曳 public void mouseDragged(MouseEvent e) { Graphics g = canvas.getGraphics(); // 清除画布区域 g.clearRect(0, 0, canvas.getWidth(), canvas.getHeight()); g.setColor(Color.RED); x2 = e.getX(); y2 = e.getY(); // 四种情况 if (x2 > x1 && y2 > y1) { g.drawRect(x1, y1, x2 - x1, y2 - y1); } else if (x2 > x1 && y2 < y1) { g.drawRect(x1, y2, x2 - x1, y1 - y2); } else if (x2 < x1 && y2 > y1) { g.drawRect(x2, y1, x1 - x2, y2 - y1); } else if (x2 < x1 && y2 < y1) { g.drawRect(x2, y2, x1 - x2, y1 - y2); }

} }

public class Exp7_2 extends JFrame { void initUI() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setResizable(false); setSize(600, 400); setVisible(true); } public static void main(String[] args) { Exp7_2 t = new Exp7_2(); t.initUI(); MyMouserListener2 listener = new MyMouserListener2(t); t.addMouseListener(listener); t.addMouseMotionListener(listener); } }

实验三

/********************************* 3. 编写满足以下要求的GUI程序。

① 3个滚动条的可选值范围均为0~255,分别对应R、G、B颜色分量。

② 根据选择的单选按钮,拖动任意一个滚动条时,将3个滚动条组合而成的颜色作为下方文本框的前景色或背景色。

③ 初始状态下,单选按钮选择项、滚动条值、文本框前景或背景色应保持一致。 ④ 在单选按钮间切换时,应将滚动条的值改变为相应颜色的颜色分量。 **********************************/ package ch08;

import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font;

import java.awt.GridLayout;

import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.AdjustmentEvent; import java.awt.event.AdjustmentListener;

import javax.swing.ButtonGroup; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel;

import javax.swing.JRadioButton;

import javax.swing.JScrollBar; import javax.swing.JTextField;

public class Exp7_3 extends JFrame implements ActionListener, AdjustmentListener { JRadioButton foreColorRb = new JRadioButton(\前景色\ JRadioButton backColorRb = new JRadioButton(\背景色\ JScrollBar redScrollBar = new JScrollBar(JScrollBar.HORIZONTAL, 0, 10, 0, 265); JScrollBar greenScrollBar = new JScrollBar(JScrollBar.HORIZONTAL, 0, 10, 0, 265); JScrollBar blueScrollBar = new JScrollBar(JScrollBar.HORIZONTAL, 0, 10, 0, 265); JTextField tf = new JTextField(\测试文字\ void initUI() { ButtonGroup group = new ButtonGroup(); group.add(foreColorRb); group.add(backColorRb); // 两个单选按钮所在的面板 JPanel rbPanel = new JPanel(); rbPanel.add(foreColorRb); rbPanel.add(backColorRb); // 三个滚动条及其标签所在的面板 JPanel scrPanel = new JPanel(new GridLayout(3, 1, 0, 10)); JPanel p1 = new JPanel(new BorderLayout()); p1.add(new JLabel(\红:\ p1.add(redScrollBar, BorderLayout.CENTER); scrPanel.add(p1); JPanel p2 = new JPanel(new BorderLayout()); p2.add(new JLabel(\绿:\ p2.add(greenScrollBar, BorderLayout.CENTER); scrPanel.add(p2); JPanel p3 = new JPanel(new BorderLayout()); p3.add(new JLabel(\蓝:\ p3.add(blueScrollBar, BorderLayout.CENTER); scrPanel.add(p3); // 用来存放 rbPanel 和 scrPanel 的面板 JPanel top = new JPanel(new BorderLayout()); top.add(rbPanel, BorderLayout.NORTH); top.add(scrPanel, BorderLayout.CENTER);

}

setLayout(new BorderLayout(0, 20));

tf.setFont(new Font(\宋体\tf.setBackground(Color.WHITE); tf.setForeground(Color.BLACK); // 加入top 面板 和 文本框到窗口 add(top, BorderLayout.NORTH); add(tf, BorderLayout.CENTER);

// 为按钮和滚动条增加监听器

foreColorRb.addActionListener(this); backColorRb.addActionListener(this); redScrollBar.addAdjustmentListener(this); greenScrollBar.addAdjustmentListener(this); blueScrollBar.addAdjustmentListener(this);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setResizable(false); setSize(600, 400); setVisible(true);

public void actionPerformed(ActionEvent e) { if (e.getSource() == backColorRb) { // 点击的是背景色按钮 Color c = tf.getBackground(); // 得到背景色 redScrollBar.setValue(c.getRed()); // 设置滚动条的值 greenScrollBar.setValue(c.getGreen()); blueScrollBar.setValue(c.getBlue()); } else if (e.getSource() == foreColorRb) { Color c = tf.getForeground(); redScrollBar.setValue(c.getRed()); greenScrollBar.setValue(c.getGreen()); blueScrollBar.setValue(c.getBlue()); } }

public void adjustmentValueChanged(AdjustmentEvent e) { // 拖动滚动条,改变文本框前景或背景色 int r = redScrollBar.getValue(); int g = greenScrollBar.getValue(); int b = blueScrollBar.getValue();

Color c = new Color(r, g, b); if (backColorRb.isSelected()) {

tf.setBackground(c); } else { tf.setForeground(c); } } public static void main(String[] args) { Exp7_3 t = new Exp7_3(); t.initUI(); } }

实验四

/*********************************

5. 编写GUI程序模拟Windows的图片查看器。 ① 窗口下部区域显示若干图片的缩略图。 ② 当图片较多时,显示水平滚动条。 ③ 可任意选择缩略图。

④ 选择某个缩略图后,在窗口上部区域显示完整图片。

⑤ 点击前一个(后一个)按钮时,切换到上一张(下一张)图片,若当前选择的是首个(末个)图片时,则前一个(后一个)按钮不可用。 **********************************/ package ch08;

import java.awt.BorderLayout; import java.awt.Color; import java.awt.Cursor; import java.awt.Image;

import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.File;

import java.net.URISyntaxException; import java.net.URL;

import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel;

import javax.swing.JScrollPane;