请教JAVA问题
importjava.awt.*;importjavax.swing.*;importjava.awt.event.*;classMyWindowextendsJFram...
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 BorderLayout());
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(800,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.yellow);
g.fillRect(x, y, 50, 50);
}
字数有限,MouseListener, MouseMotionListene两个接口的其它几个方法此处略。
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("滚动条示意图");
}
}
问题:
1。MyListener类继承自JComponent类,而JComponent类是所有组件类的父类,只是一个接口而已,为什么调试的窗口中是一个矩形而不是其它的别的图形呢?
2。MyWindow类中申明了JPANEL类的对象scrolledCanvas,将几个组件加入其中,又加它加入JAPNEL类的对象CON,为什么不直接加入CON对象中呢? 展开
import javax.swing.*;
import java.awt.event.*;
class MyWindow extends JFrame{
public MyWindow(String s){
super(s);
Container con=this.getContentPane();
con.setLayout(new BorderLayout());
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(800,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.yellow);
g.fillRect(x, y, 50, 50);
}
字数有限,MouseListener, MouseMotionListene两个接口的其它几个方法此处略。
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("滚动条示意图");
}
}
问题:
1。MyListener类继承自JComponent类,而JComponent类是所有组件类的父类,只是一个接口而已,为什么调试的窗口中是一个矩形而不是其它的别的图形呢?
2。MyWindow类中申明了JPANEL类的对象scrolledCanvas,将几个组件加入其中,又加它加入JAPNEL类的对象CON,为什么不直接加入CON对象中呢? 展开
展开全部
1. g.fillRect(0,0,size.width,size.height)
因为这一行:你是画的矩形:这一行的意思是起点是(0,0)坐标,后面的表示矩形的宽和高
2.Java是这种机制的:con表示的是容器,而Jpanel表示的是面板,一般都会自己定义一个面板,我们要画的东西 全都放在面板上面,而容器是用来加载面板的。
如果你之后加入菜单的话 ,直接把菜单的组件添加到面板上面就可以了,最后只要把面板添加到容器中就ok了。
因为这一行:你是画的矩形:这一行的意思是起点是(0,0)坐标,后面的表示矩形的宽和高
2.Java是这种机制的:con表示的是容器,而Jpanel表示的是面板,一般都会自己定义一个面板,我们要画的东西 全都放在面板上面,而容器是用来加载面板的。
如果你之后加入菜单的话 ,直接把菜单的组件添加到面板上面就可以了,最后只要把面板添加到容器中就ok了。
追问
JComponent类只是一个接口,MYLISTENER类继承它后到底是个什么形状呢?MYLISTENER的构造函数只是添加了几个监视器而已,其它的什么都没有做啊!
追答
这不能这样说:是什么形状是你控制的,你想让他什么形状都可以,看你paint()中怎么画的,你继承JComponent组件,这个组件只是一个接口而已,好让你实现一些方法。可以直接在已有的方法里面写相应的代码就可以了 ,不要主动去调用!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询