U mnie działa takie coś:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Main extends JFrame
{
private Window panel;
public static void main(String[] args)
{
new Main();
}
//------------------------
public Main()
{
panel=new Window();
addComponentListener(new ComponentAdapter()
{
public void componentMoved(ComponentEvent e)
{
panel.setVisible(true);
panel.setLocation(getX() + getWidth(), getY() + ((getHeight() - panel.getHeight()) / 2));
}
});
//bez poniższego działało trochę źle, po zasłonięciu okna i ponownym odsłonięciu, panel z przyciskami był niewidoczny, konieczne było poruszenie okna lub minimalizacja
//i przywrócenie rozmiaru
addFocusListener(new FocusAdapter()
{
public void focusGained(FocusEvent e)
{
panel.setVisible(true);
panel.setLocation(getX() + getWidth(), getY() + ((getHeight() - panel.getHeight()) / 2));
}
});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(800,600));
pack();
setLocationRelativeTo(null);
setVisible(true);
}
}
import javax.swing.*;
import java.awt.*;
public class Window extends JWindow
{
public static void main(String[] args)
{
new Window();
}
public Window()
{
int counter=45;
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(counter,1,3,3));
JScrollPane sp = new JScrollPane(panel);
getContentPane().add(sp);
setPreferredSize(new Dimension(100,400));
for (int i = 0; i<counter; i++)
{
panel.add(new JButton(""+(i+1)));
}
pack();
setVisible(true);
}
}