I am working on a sidebar for an application, this sidebar only extends if it has been pressed. I am using a Thread loop to update the size of the JPanel but for some reason the JFrame doesn't update the size of the it. The MouseListener
works, and the loop works too, but it still does'nt seem to update.
Heres the code :-
public class DisplayHandler implements Runnable{
Thread thread;
public static void main(String[] args) {
SwingUtilities.invokeLater(()->new DisplayHandler());
}
JFrame f = new JFrame();
JPanel westData = new JPanel();
boolean startExtending = false;
int westDataW = 100;
private DisplayHandler() {
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(1280, 720);
f.setLocationRelativeTo(null);
f.setLayout(new BorderLayout());
onStart();
f.setVisible(true);
thread = new Thread(this);
thread.start();
}
private void onStart() {
Color sideBar = new Color(0,0,0,50);
westData.setPreferredSize(new Dimension(westDataW,720));
westData.setBackground(sideBar);
westData.setFocusable(true);
westData.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
startExtending = true;
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
startExtending = false;
}
});
f.add(westData, BorderLayout.WEST);
}
@Override
public void run() {
while(thread!=null) {
if(startExtending) {
if(westDataW<300) {
westData.setPreferredSize(new Dimension(westDataW, 720));
westDataW++;
}
}
if(!startExtending) {
if(westDataW>100) {
westData.setPreferredSize(new Dimension(westDataW, 720));
westDataW--;
}
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}