当前位置:  技术问答>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对象所以不能滚动??

帮帮忙啊,我研究好久了,用了多种方法,但总是有问题而不能实现!

|
我也遇到过这类的问题,几个方法你试试吧,
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. 
... 

|
repaint()

|
跟你说用jPanel实施。

|
你已经考虑的比我细致了,我也曾遇到这个问题!
有结果时帮忙转告一声:
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. 
...

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.awt类panel的类成员方法: panel定义及介绍
  • 这是什么错误?为什么不能在一个panel里添加panel??
  • java命名空间java.awt类panel.accessibleawtpanel的类成员方法: panel.accessibleawtpanel定义及介绍
  • 在一个panel里弹出一个对话框后,在这个对话框中怎么调用该panel的某些方法?
  • java命名空间javax.swing.plaf.synth类region的类成员方法: panel定义及介绍
  • Drop Down Panel script
  • java命名空间javax.accessibility类accessiblerole的类成员方法: panel定义及介绍
  • 各位高手,我在applet里放了一个jpanel,在panel里add了一个按钮,又用panel.getgraphic.drawline,刷新后只有按钮,没有那条线了
  • java命名空间javax.print类serviceuifactory的类成员方法: panel_ui定义及介绍
  • Sliding Login Panel
  • java命名空间javax.swing类jcolorchooser的类成员方法: preview_panel_property定义及介绍
  • 搜索引擎优化工具 Seo Panel
  • java命名空间javax.swing类jcolorchooser的类成员方法: chooser_panels_property定义及介绍
  • 如何在AWT Panel中画200个小方块,并能定位每个方块的坐标???急
  • java命名空间java.awt类panel的类成员方法: getaccessiblecontext定义及介绍
  • jQuery图片库插件 Panel Gallery
  • gnome的panel上不显示当前运行的程序了!
  • 从主Frame里怎样了解到一个子Panel里的ButtonGroup中选中的是哪个RadioButton?
  • 怎样在jb的Frame中加入两个并列的Panel,立即给分?
  • 请问有没有从把panel上的swing component的方法
  • 怎样实现透明的panel,在线等待


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3