<Swing Dev> Autosize dialog pack() seems to be buggy on Linux

Alexander Scherbatiy alexandr.scherbatiy at oracle.com
Thu Oct 30 00:15:59 UTC 2014


On 10/29/2014 3:22 PM, helpcrypto helpcrypto wrote:
> AFAICT it only happens on icedtea
>
> Do you want me to report it at oracle anyway?

      Yes. You can start the summary with the [IcedTea] prefix.

     Thanks,
     Alexandr.
>
> Regards.
>
> On Wed, Oct 29, 2014 at 10:33 PM, Alexander Scherbatiy 
> <alexandr.scherbatiy at oracle.com 
> <mailto:alexandr.scherbatiy at oracle.com>> wrote:
>
>
>       Hi,
>
>       Could you create an issue on it: http://bugreport.java.com/bugreport
>
>       Thanks,
>       Alexandr.
>
>     On 10/27/2014 5:06 PM, helpcrypto helpcrypto wrote:
>
>         Hi.
>
>
>         I'm usually at icedtea web maillist, but this bug seems to be
>         100% swing-related.
>
>         I'm trying to display a dialog, centered on screen, which size
>         is fitted to changing contents.
>         AFAIK, this should be done using pack().
>
>
>         Running the "attached testcase", I have noticed two things:
>
>          - After each pack, as the BorderLayoutseem to be
>         center-resized, the window moves down after each click (but
>         pack always seem to work). IMHO this is not a friendly
>         behaviour, but can be solved adding a
>         setLocationRelativeToafter pack
>          - If I add a setLocationRelativeTo(as shown below) pack fails
>         from time to time and incorrectly sizes the dialog.
>
>         Can you guys help me?
>         Registered this bug a few weeks ago:
>         http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=1798
>
>
>             package testcase;
>             import java.awt.BorderLayout;
>             import java.awt.event.ActionEvent;
>             import java.awt.event.ActionListener;
>             import java.lang.reflect.InvocationTargetException;
>             import java.util.logging.Level;
>             import java.util.logging.Logger;
>             import javax.swing.*;
>             import javax.swing.border.EmptyBorder;
>             public class Testcase extends JDialog {
>             private JPanel panel;
>             private JLabel label;
>             private JButton foo;
>             private JButton bar;
>             public Testcase() {
>                     setTitle("Test");
>                     setModal(true);
>                     setResizable(false);
>                     setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
>                     foo = new JButton();
>                     foo.setText("foo");
>                     foo.addActionListener(new ActionListener() {
>                         @Override
>             public void actionPerformed(ActionEvent e) {
>                             foo();
>             }
>             });
>             foo.setVisible(true);
>                     bar = new JButton();
>                     bar.setText("bar");
>                     bar.addActionListener(new ActionListener() {
>                         @Override
>             public void actionPerformed(ActionEvent e) {
>                             bar();
>             }
>             });
>             bar.setVisible(true);
>                     label = new JLabel();
>                     label.setBorder(new EmptyBorder(10, 10, 10, 10));
>                     label.setText("a");
>                     panel = new JPanel();
>                     panel.setLayout(new BorderLayout());
>             panel.setVisible(true);
>                     panel.setBorder(new EmptyBorder(10, 10, 10, 10));
>                     panel.add(foo, BorderLayout.NORTH);
>                     panel.add(label, BorderLayout.CENTER);
>                     panel.add(bar, BorderLayout.SOUTH);
>                     getContentPane().add(panel);
>                     pack();
>                     //validate();
>             //repaint();
>                     setLocationRelativeTo(null);
>             }
>             public void foo(){
>                             label.setText("<html>"+
>            
>         "foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo"+
>             "<br/>"+
>            
>         "foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo"+
>             "<br/>"+
>            
>         "foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo"+
>             "<br/>"+
>            
>         "foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo"+
>             "<br/>"+
>            
>         "foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo"+
>             "</html>");
>                             pack();
>                             //validate();
>             //repaint();
>                             setLocationRelativeTo(null);
>             }
>             public void bar(){
>                             label.setText("<html>bar</html>");
>                             pack();
>                             //validate();
>             //repaint();
>                             setLocationRelativeTo(null);
>             }
>             public static void main(String[] args) {
>             try {
>             SwingUtilities.invokeAndWait(new Runnable() {
>                             @Override
>             public void run() {
>             JDialog test= new Testcase();
>                                 test.setVisible(true);
>             }
>             });
>             } catch (InterruptedException | InvocationTargetException
>         ex) {
>                          
>          Logger.getLogger(Testcase.class.getName()).log(Level.SEVERE,
>         null,
>             ex);
>             }
>             }
>             }
>
>
>




More information about the swing-dev mailing list