当前位置: 技术问答>java相关
panel与scrollpanel的滚动简单问题,80分,请进-->!!!!!!!!!!!!!!!!!!
来源: 互联网 发布时间:2015-02-19
本文导语: 我想在一个scrollpanel中添加panel,点击按钮在panel中添加label,动态改变panel的大小,panel超过scrollpanel大小时scrollpanel实现滚动。 看看下面的jbuilder程序: import java.awt.*; import java.awt.event.*; import java.applet.*; import javax.swi...
我想在一个scrollpanel中添加panel,点击按钮在panel中添加label,动态改变panel的大小,panel超过scrollpanel大小时scrollpanel实现滚动。
看看下面的jbuilder程序:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import java.lang.String;
public class pane extends Applet {
int i=0;
String str_ChatText;
JPanel jPanel1 = new JPanel();
JPanel jPanel2 = new JPanel();
Button button2 = new Button();
Panel panel1 = new Panel();
ScrollPane scrollpane = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
BorderLayout borderLayout1 = new BorderLayout();
/**Construct the applet*/
public pane() {
}
/**Initialize the applet*/
public void init() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
/**Component initialization*/
private void jbInit() throws Exception {
this.setBackground(new Color(255,242,208));
this.setLayout(borderLayout1);
button2.setLabel("button2");
button2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button2_actionPerformed(e);
}
});
panel1.setBackground(new Color(232, 255, 210));
panel1.setLayout(null);
jPanel2.setPreferredSize(new Dimension(450, 50));
jPanel1.setPreferredSize(new Dimension(450, 200));
this.add(jPanel2, BorderLayout.SOUTH);
jPanel2.add(button2, null);
this.add(jPanel1, BorderLayout.CENTER);
jPanel1.add(scrollpane, null);
scrollpane.add(panel1);
Adjustable vAdjust=scrollpane.getVAdjustable();
vAdjust.setUnitIncrement(10);
Adjustable hAdjust=scrollpane.getHAdjustable();
hAdjust.setUnitIncrement(10);
panel1.setSize(450, 300);
scrollpane.setSize(450, 250);
}
public void paint(Graphics g){
}
void button2_actionPerformed(ActionEvent e) {
Label label2 = new Label("This is the Button 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 23 2 2 2 23 2 2 2 32 2 2 2 2 2 2 2 32 ");
label2.setBounds(0,i,1000,10);
i=i+20;
System.out.println("i="+i);
panel1.invalidate();
panel1.add(label2,null);
label2.validate();
panel1.setSize(450, 500+i);
String sd=panel1.getSize().toString();
System.out.println("sd="+sd);
System.out.println("panel1.setSize,i="+i);
panel1.show();
String scrollp=scrollpane.getScrollPosition().toString();
System.out.println("scrollp="+scrollp);
scrollpane.setScrollPosition(5,10);
scrollp=scrollpane.getScrollPosition().toString();
System.out.println("scrollp1="+scrollp);
}
}
问题是点击按钮后我用System.out.println("sd="+sd);打印出panel的size改变了,但实际看上去却没变!只有放大或缩小ie窗口才变化。请问如何解决?validate(),show()等方法都用了还是不见效!请高手帮忙!
如果不能实现,那用jpanel和jscrollpanel能否实现?如何实现?
另我用scrollpanel+canvas(canvas添加在scrollpanel里),在canvas里drawString(),当超出scrollpanel大小时也是不滚动!!是不是因为drawString是graphics对象所以不能滚动??
帮帮忙啊,我研究好久了,用了多种方法,但总是有问题而不能实现!
看看下面的jbuilder程序:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import java.lang.String;
public class pane extends Applet {
int i=0;
String str_ChatText;
JPanel jPanel1 = new JPanel();
JPanel jPanel2 = new JPanel();
Button button2 = new Button();
Panel panel1 = new Panel();
ScrollPane scrollpane = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
BorderLayout borderLayout1 = new BorderLayout();
/**Construct the applet*/
public pane() {
}
/**Initialize the applet*/
public void init() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
/**Component initialization*/
private void jbInit() throws Exception {
this.setBackground(new Color(255,242,208));
this.setLayout(borderLayout1);
button2.setLabel("button2");
button2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button2_actionPerformed(e);
}
});
panel1.setBackground(new Color(232, 255, 210));
panel1.setLayout(null);
jPanel2.setPreferredSize(new Dimension(450, 50));
jPanel1.setPreferredSize(new Dimension(450, 200));
this.add(jPanel2, BorderLayout.SOUTH);
jPanel2.add(button2, null);
this.add(jPanel1, BorderLayout.CENTER);
jPanel1.add(scrollpane, null);
scrollpane.add(panel1);
Adjustable vAdjust=scrollpane.getVAdjustable();
vAdjust.setUnitIncrement(10);
Adjustable hAdjust=scrollpane.getHAdjustable();
hAdjust.setUnitIncrement(10);
panel1.setSize(450, 300);
scrollpane.setSize(450, 250);
}
public void paint(Graphics g){
}
void button2_actionPerformed(ActionEvent e) {
Label label2 = new Label("This is the Button 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 23 2 2 2 23 2 2 2 32 2 2 2 2 2 2 2 32 ");
label2.setBounds(0,i,1000,10);
i=i+20;
System.out.println("i="+i);
panel1.invalidate();
panel1.add(label2,null);
label2.validate();
panel1.setSize(450, 500+i);
String sd=panel1.getSize().toString();
System.out.println("sd="+sd);
System.out.println("panel1.setSize,i="+i);
panel1.show();
String scrollp=scrollpane.getScrollPosition().toString();
System.out.println("scrollp="+scrollp);
scrollpane.setScrollPosition(5,10);
scrollp=scrollpane.getScrollPosition().toString();
System.out.println("scrollp1="+scrollp);
}
}
问题是点击按钮后我用System.out.println("sd="+sd);打印出panel的size改变了,但实际看上去却没变!只有放大或缩小ie窗口才变化。请问如何解决?validate(),show()等方法都用了还是不见效!请高手帮忙!
如果不能实现,那用jpanel和jscrollpanel能否实现?如何实现?
另我用scrollpanel+canvas(canvas添加在scrollpanel里),在canvas里drawString(),当超出scrollpanel大小时也是不滚动!!是不是因为drawString是graphics对象所以不能滚动??
帮帮忙啊,我研究好久了,用了多种方法,但总是有问题而不能实现!
|
我也遇到过这类的问题,几个方法你试试吧,
1、你用updateUI试试。
2、你干脆全都用swing的组件.当swing和awt的组件交迭使用时,会出现一些意想不到的错误。
3、如果你认为已经无计可施了。那建议你去看看jdk的源代码,看看它的scrollbar是怎样实现的。(这有点难度)。
1、你用updateUI试试。
2、你干脆全都用swing的组件.当swing和awt的组件交迭使用时,会出现一些意想不到的错误。
3、如果你认为已经无计可施了。那建议你去看看jdk的源代码,看看它的scrollbar是怎样实现的。(这有点难度)。
|
修改一句:
//when you want to add some component inside the jp in runtime you must do this after add()
...
jp.setLayout(); // may be you've forget it, add it to your source code.
...
//when you want to add some component inside the jp in runtime you must do this after add()
...
jp.setLayout(); // may be you've forget it, add it to your source code.
...
|
repaint()
|
跟你说用jPanel实施。
|
你已经考虑的比我细致了,我也曾遇到这个问题!
有结果时帮忙转告一声:
cjwjy212@sohu.com
有结果时帮忙转告一声:
cjwjy212@sohu.com
|
我以前做过的,如果你使用swing的话,我一定能帮到你的,怎样,确实让我给你指示指示?
|
我把解决的方案贴出来好了。
用swing做applet似乎不大合适吧,这是在我的应用程序中用到的。
我建议你要吗全部用swing,要吗全部不用,这可是经验教训。
在swing中,用JScrollPane,和JPanel。
JScrollPane scroPan;
...
JPanel jp; //jp用来装载组件
...
jp.add(..); ...
//inside the applet
this.add(scroPan,BorderLayout.CENTER);
scroPan.getViewPort().add(jp,BorderLayout.CENTER);
//it should work now!!
//when you want to add some component in the jp you must do this after add()
...
jp.setLayout(); // may be you've forget it, add it to your source code.
...
用swing做applet似乎不大合适吧,这是在我的应用程序中用到的。
我建议你要吗全部用swing,要吗全部不用,这可是经验教训。
在swing中,用JScrollPane,和JPanel。
JScrollPane scroPan;
...
JPanel jp; //jp用来装载组件
...
jp.add(..); ...
//inside the applet
this.add(scroPan,BorderLayout.CENTER);
scroPan.getViewPort().add(jp,BorderLayout.CENTER);
//it should work now!!
//when you want to add some component in the jp you must do this after add()
...
jp.setLayout(); // may be you've forget it, add it to your source code.
...