1.题目要求 小应用程序先将若干个按钮和若干个标签放入JPanel中,然后将JPpanel放入JScrollPane中,最后, 将JScrollPane放入小程序的窗口中,程序所创建的JScrollPane总是带水平和垂直滚动条,滚动条面板的可视范围小于面板的时机要求,可以移动滚动条的滑块现实面板原先不在可视范围内的区域。
import java.applet.*;
import javax.swing.*;
import java.awt.*;
class MyWindow extends JFrame{
public MyWindow(int w,int h){
setTitle("滚动面板实例");
Container con=getContentPane();
con.setPreferredSize(new Dimension(w,h));
con.setLayout(new BorderLayout());
JPanel p=new JPanel();
p.setLayout(new GridLayout(6,6));
for(int i=0;i<6;i++)
{
p.add(new JLabel());
for(int j=1;j<=2;j++)
{
p.add(new JButton("按钮" +(2*i+j)));
p.add(new JLabel("标签" +(2*i+j)));
}
p.add(new JLabel());
}
p.setBackground(Color.blue);
p.setPreferredSize(new Dimension(w+60,h+60));
JScrollPane scrollPane=new JScrollPane(p);
scrollPane.setPreferredSize(new Dimension(w-60,h-60));
add(scrollPane,BorderLayout.CENTER);
setVisible(true);
pack();
}
}
class ScrollPane extends JScrollPane{
public ScrollPane(Component p){
super(p);
this.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
this.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
}
}
public class Ex extends Applet
{
MyWindow myWindow;
public void init(){
myWindow=new MyWindow(100,350);
}
}
问题(1)add(scrollPane,BorderLayout.CENTER);
setVisible(true);
pack();
这三个方法为什么可以用this.而不可以用myWindow.呢?
问题(2)在类里 add,pack, setVisible这些方法前面为什么不加调用它的对象呢?2.import java.applet.*;
import javax.swing.*;
import java.awt.event.*;
public class Example5 extends Applet{
JTextField text1,text2;
Sqr s=new Sqr();
public void init(){
text1=new JTextField(10);
text2=new JTextField(10);
add(text1);
add(text2);
text1.addActionListener(s);
}
}
class Sqr implements ActionListener{
public void actionPerformed(ActionEvent e){
if(e.getSource()==text1){
long n=Long.parseLong(text1.getText());
text2.setText(String.valueOf(n*n));
}
else{}
}
}
问题(1)大家好 我这里的text1 text2为什么不可以直接用呢
第二题就简单了,应该如下
import java.applet.*;
import javax.swing.*;
import java.awt.event.*;
public class Example5 extends Applet{
JTextField text1,text2;
Sqr s=new Sqr();
public void init(){
text1=new JTextField(10);
text2=new JTextField(10);
add(text1);
add(text2);
text1.addActionListener(s);
}
class Sqr implements ActionListener{
public void actionPerformed(ActionEvent e){
if(e.getSource()==text1){
long n=Long.parseLong(text1.getText());
text2.setText(String.valueOf(n*n));
}
else{}
}
}
}
import java.applet.*;
import javax.swing.*;import java.awt.event.*;
public class Example5 extends Applet{
JTextField text1,text2;
public void init(){
text1=new JTextField(10);
text2=new JTextField(10);
Sqr s=new Sqr( text1, text2);
add(text1);
add(text2);
text1.addActionListener(s);
}
}
class Sqr implements ActionListener{
private JTextField text1;
private JTextField text2;
Sqr( JTextField text1,JTextField text2){
this.text1 = text1;
this.text2= text2;
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==text1){
long n=Long.parseLong(text1.getText());
text2.setText(String.valueOf(n*n));
}
else{}
}
}
第二题就简单了,应该如下
import java.applet.*;
import javax.swing.*;
import java.awt.event.*;
public class Example5 extends Applet{
JTextField text1,text2;
Sqr s=new Sqr();
public void init(){
text1=new JTextField(10);
text2=new JTextField(10);
add(text1);
add(text2);
text1.addActionListener(s);
}
class Sqr implements ActionListener{
public void actionPerformed(ActionEvent e){
if(e.getSource()==text1){
long n=Long.parseLong(text1.getText());
text2.setText(String.valueOf(n*n));
}
else{}
}
}
}这里的text2 text1也是不合法的把
add(scrollPane,BorderLayout.CENTER);
setVisible(true);
pack();
在mywindow构造函数里面,你没有实例化mywindow,你要是用mywindow.pack();等 编译器怎么找mywindow啊
当然得用this了 再多敲几个其他的例子就明白了
怎么不合法了,明确一下
你说的那三个方法是从父类中继承下来的方法,子类当然可以直接调用父类中的非私有的方法,而this指的是当前的MyWindow的对象,this是可以省略的,你所说的myWindow.调用是针对静态方法来说的,不过就算是静态的方法也是用类名(也就是MyWindow,而不是myWindow)来调用的。再说第二段代码的问题
你说的text1,text2不能直接用我不太明白,如果说你的意思是直接用 text1.方法 或者是 text2.方法 的话,那就和第一段的回答一样,这是针对静态方法而言的;而对于非静态的方法则需要先实例化对象,再由对象来调用方法,就像代码中的
text1=new JTextField(10);
text2=new JTextField(10);
这两句代码就实例化了两个JTextField对象,由这两个对象才能调用JTextField类中的非静态方法,比如说代码中的
text1.getText()
text2.setText(String.valueOf(n*n));
,不知道这样说你明白了没
public ScrollPane(Component p){
super(p);
this.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
this.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
}
}请大家详细解说这段程序的过程。这里的 super(p);调用JScrollPane的构造方法有什么用,这里的this是指类ScrollPane的对象吗?
this指的就是ScrollPane类的当前对象