Avatar billede fredand Forsker
25. september 2003 - 13:53 Der er 5 kommentarer og
1 løsning

Need to update a JScrollPane

Hello!
I have a JPanel that may be resized inside a JScrollPane, but when it happens the scrollpane doesn't updates.

I have the code below so you can test it and se that the JScrollPane stays the same. The updates occurs inside the main-method.

So if you can help me I would be most thankfull.

Best regards
Fredrik

//The JScrollPane
import java.awt.*;
import javax.swing.*;
import java.util.*;


public class MyScrollPanel extends JPanel
{
  private MyPanel myPanel;
  private JScrollPane jscrollPane;

  public MyScrollPanel()
  {
      myPanel = new MyPanel();
      setBackground(Color.pink);
      setLayout(new GridLayout(1,1));
      jscrollPane = new JScrollPane(myPanel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
      add(jscrollPane);
  }

  public void updateMyPanel(String[] texts)
  {
      myPanel.updateLabels(texts);
      myPanel.updateValues(texts);
      myPanel.updatePanel();

  }

  public static void main(String[] args)
  {
      MyScrollPanel myScrollPanel = new MyScrollPanel();
      JFrame jFrame = new JFrame("MyScrollPanel");
      jFrame.getContentPane().add( myScrollPanel );
      jFrame.setSize(300, 300);
      jFrame.show();
      String[] texts = { "Obbaobba",
      "Obbaobba",
      "Obbaobba",
      "Obbaobba",
      "Obbaobba",
      "Obbaobba",
      "Obbaobba",
      "Obbaobba",
      "Obbaobba",
      "Obbaobba",
      "Obbaobba",
      "Obbaobba",
      "Obbaobba",
      "Obbaobba",
      "Obbaobba",
  };
      myScrollPanel.updateMyPanel(texts);
  }
}

//The JPanel
import java.awt.*;
import javax.swing.*;

public class MyPanel extends JPanel
{
  JLabel[] textLabels;
  JLabel[] valueLabels;
  String[] labels;
  String[] values;

  public MyPanel()
  {
      setBackground(Color.yellow);
      setLayout(null);
  }

  public void updateLabels(String[] l)
  {
      labels = l;
  }

  public void updateValues(String[] v)
  {
      values = v;
  }

  public void updatePanel()
  {
      removeAll();

      int x = 10;
      int y = 10;
      textLabels = new JLabel[labels.length];
      valueLabels = new JLabel[labels.length];
      setSize(200, (20+( (2*labels.length*20))) );

      for(int i = 0; i < labels.length; i++)
      {
        textLabels[i] = new JLabel( labels[i] );
        valueLabels[i] = new JLabel( values[i] );
        textLabels[i].setForeground(Color.black);
        valueLabels[i].setForeground(Color.red);
      }

      for(int i = 0; i < labels.length; i++)
      {
        textLabels[i].setBounds(x, y, 200, 20);
        y = y + 20;
        valueLabels[i].setBounds(x, y, 200, 20);
        y = y + 20;
        add(textLabels[i]);
        add(valueLabels[i]);
      }
  }
}
Avatar billede riversen Nybegynder
25. september 2003 - 15:07 #1
why don't you place a JTextArea in your JScrollPane instead of a panel?
Avatar billede fredand Forsker
25. september 2003 - 15:10 #2
Hello!

Sorry, but that is not what I want.
/Fredrik
Avatar billede riversen Nybegynder
25. september 2003 - 15:21 #3
I found this http://forum.java.sun.com/thread.jsp?thread=344118&forum=57&message=1420385

I tried myPanel.setPreferredSize( new Dimension(600,600) ); in constructor MyScrollPane
Avatar billede fredand Forsker
25. september 2003 - 15:33 #4
Thanks mate!

You solved my problemo!

I changed setSize to your's setPreferredSize( new Dimension...

But I do not understand why I have to use that instead of setSize, so if you can explaine it, I would'n mind!

Best regards
Fredrik

Ps
BUT HEY, YOU MUST GIVE ME AN ANSWER SO I CAN GIVE YOU THE POINTS!
Avatar billede riversen Nybegynder
25. september 2003 - 15:39 #5
I have no idea why, sorry.
Avatar billede fredand Forsker
25. september 2003 - 15:42 #6
Ok!

Thanks any way mate!

/Fredrik
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester