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]);
}
}
}
