问答题

本题的功能是监听鼠标左右键的单击,以及面板中滚动条的添加。在窗口的画板中单击鼠标左键,在单击的位置绘制一个圆,当绘制的圆大于画板的大小时,画板就添加滚动条,在画板中单击鼠标右键,则清除画板中的所有图形。
import javax.swing.*;
import javax.swing.event.MouselnputAdapter;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class java3 extends JPanel{
private Dimension size;
private Vector objects;
private final Color colors[]={
Color.red,Color.blue,Color.green,Color.or-
ange,
Color.cyan,Color.magenta,Color.darkGray,
Color.yellow);
private final int color_n=colors.length;
JPanel drawingArea;
public java3(){
setopaque(true);
size=new Dimension(0,0);
objects=new Vector();
JLabel instructionsLeft=new JLabel("单击鼠标
左键画圆.");
JLabel instructionsRight=new JLabel("单击鼠
标右键清空画板.");
JPanel instructionPanel=new JPanel(new Grid-
Layout(0,1));
instructionPanel.add(instructionsLeft);
instructionPanel.add(instructionsRight);
drawingArea=new JPanel(){
protected void paintComponent(Graphics g){
super.paintComponent(g);
Rectangle rect;
for(int i=0;i<objects.size();i++){
rect=(Rectangle)objects.elementAt(i):
g.setColor(colors[(i%color_n)]);
g.fillOval(rect.X,rect.Y,rect.width,rect.
height);
}
}
};
drawingArea.setBackground(Color.white);
drawingArea.addMouseListener(new MouseLis-
tener());
JScrollPane scroller=new JScrollPane(drawing-
Area);
scroller.setPreferredSize(new Dimension(200,
200));
setLayout(new BorderLayout());
add(instructionPanel,BorderLayout.NORTH);
add(scroller,BorderLayout.CENTER):
}
class MyMouseListener extends mouseInputAdapt-
er{
final int W=100;
final int H=100;
public void mouseReleased(MouseEvent e){
boolean changed=false;
if(SwingUtilities.isRightMouseButton(e)){
objects.removeAllElements();
size.width=0;
size.height=0;
changed=true;
}else{
int X=e.getX()-W/z;
int Y=e.getY()-H/2 if(x<0)x=0; if(y<O)Y=0;
Rectangle rect=new Rectangle(X,Y,W,H);
objeets.addElement(rect);
drawingArea.scrollRectToVisible(rect);
int this_width=(x+W+2);
if(this width>size.width)
{size.width=this_width;changed=true;}
int this=height=(y+H+2);
if(this_height>size.height)
{size.height=this_height;changed=true;}
}
if(changed){ drawingArea.setPreferredSize(size);
drawingArea.revalidateI();
}
drawingArea.paint();
}
}
public static void main(String args[]){
JFrame frame=new JFrame("java3"):
frame.addWindowListener(new WindowAdapter
(){
public void windowClosing(WindowEvent e)
{System.exit(0);}
});
frame.setContentPane(new java3());
frame.pack();
frame.setVisible(true);
}
}

【参考答案】

第1处:drawingArea.addMouseListener(new MyMouseListener())
......

(↓↓↓ 点击下方‘点击查看答案’看完整答案、解析 ↓↓↓)

相关考题

问答题 本题中,主窗口有一个按钮“打开对话框”和一个文本域,单击按钮“打开对话框”后会弹出一个对话框,对话框上有两个按钮“Yes"和“N0”,单击对话框上的“Yes”和“N0”按 钮后返回主窗口,并在右侧文本域中显示刚才所单击的按钮信息。 import java.awt.event.*; import java.awt.*; class MyDialog implements ActionListener {static final int YES=1,N0=0; int message=-1;Button yes,no; MyDialog(Frame f.String S,boolean b) {super(f,S,b); ves=new Button("Yes");yes.addActionListener (this); no=new Button("No"); no.addActionListener (this)o setLayout(new FlowLayout()); add(yes);add(no); setBounds(60,60,100,100); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {message=-1;setVisible(false);) }); } public void actionPerformed(ActionEvent e) {if(e.getSource()= =yes) {message=YES; setVisible(false); } else if(e.getSource()= = no) {message=NO; setVisible(false); } } public int getMessage() {return message; } } class Dwindow extends Frame implements ActionLis- tener {TextArea text;Button button;MyDialog dialog; Dwindow(String s) {super(s); text=new TextArea(5,22);button=new Button ("打开对话框"); button.addActionListener(this); setLayout(new FlowLayout()); add(button);add(text); dialog=new MyDialog(this,"Dialog",true); setBounds(60,60,300,300);setVisible(true); validate(); addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);} }); } public void actionPerformed(ActionEvent e) {if(e.getSource()= =button) {; if(dialog.getMessage()= =MyDialog.YES) {text.append("\n你单击了对话框的yes按 钮"); } else if(dialog.getMessage()= =MyDialog.NO) {text.append("\n你单击了对话框的N0按 钮"); } } } } public class java2 {public static void main(String args[]) {new Dwindow("java2"); } }

问答题 本题中数组arr中存储了学生的成绩,分别为87,45,56,78,67,56,91,62,82,63,程序的功能是计算低于平均分的人数,并打印输出结果。请在程序空缺部分填写适当内容。使程序能正确运行。 public class javal{ public static void main(String[]args){ int arr[]={56,91,78,67,56,87,45,62,82,63}; int num=arr.length int i=0; int sumScore= 0; int sumNum=0; double average; while(i<num){ sumScore=sumScore+arr[i]; ; } average= ; i=0; do{ if(arr[i]<average) sumNum++: i++; }while( ); System.OUt.println("average:"+average+",be- lows average:"+sumNum); } }

判断题 规模较大的高校可实行“统一领导、分级管理”的财务管理体制。( )