Как изменить ширину и высоту JWindow, используя действия JButton в Java? - PullRequest
2 голосов
/ 28 декабря 2011

Как изменить высоту JWindow из JButton действий (я пробовал setSize и перекрасить, но это не работает)?

public class Gui extends JWindow implements KeyListener
{
  public static Gui mystatic;  
  private static JPanel panelBgImg;
  private final Dimension screen;
  public static int w = 0;
  public static int h = 0;

  public void paintComponent(Graphics g) 
  {
  }

  public Dimension getPreferredSize() 
  {      
      return new Dimension(100, h);
  }

  public Gui()
  {
    ....

    /* Button 1 */
    JButton jb2 = new JButton("")  
    {
        public Dimension getPreferredSize() 
        {
          return new Dimension(50,50);
        }            
    };
    jb2.setOpaque(false);
    jb2.setContentAreaFilled(false);
    jb2.setBorderPainted(false);

    jb2.addActionListener(new ActionListener() 
    {                
      public void actionPerformed(ActionEvent e) 
      {
         h = 100;         
         /* HERE i am trying to resize the JWindow itself but not working
               return new Dimension(100, h); */
         mystatic.setSize(screen.width, 100);
         mystatic.repaint();
      }
    });

    ...

}

Ответы [ 2 ]

4 голосов
/ 28 декабря 2011

например

пожалуйста, не используйте Thread.sleep(int) во время EDT, как показано в этом примере кода, он используется для закрытия текущего экземпляра JVM, в противном случае этот экземпляр никогда не выходил из оперативной памяти ПК

import java.util.logging.*;
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.event.*;

public class SSCCE {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                createAndShowGUI();
            }
        });
    }

    private static void createAndShowGUI() {
        final JWindow window = new JWindow();
        final JPanel windowContents = new JPanel();
        JLabel label = new JLabel("A window that is pushed into view..........");
        windowContents.add(label);
        window.add(windowContents);
        window.pack();
        window.setLocationRelativeTo(null);
        final int desiredWidth = window.getWidth();
        window.getContentPane().setLayout(null);
        window.setSize(0, window.getHeight());
        window.setVisible(true);
        Timer timer = new Timer(15, new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                int newWidth = Math.min(window.getWidth() + 1, desiredWidth);
                window.setSize(newWidth, window.getHeight());
                windowContents.setLocation(newWidth - desiredWidth, 0);
                if (newWidth >= desiredWidth) {
                    ((Timer) e.getSource()).stop();
                    //restore original layout
                    window.getContentPane().setLayout(new BorderLayout());
                    window.validate();
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException ex) {
                        Logger.getLogger(SSCCE.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    System.exit(0);
                }
            }
        });
        timer.start();
    }

    private SSCCE() {
    }
}
3 голосов
/ 28 декабря 2011

Вот небольшая программа, в которой метод setSize () работает с использованием Event Dispatcher Thread.

import java.awt.event.*;

import javax.swing.*;

public class WindowTest extends JWindow implements ActionListener
{
  private JPanel panel;
  private JButton sizeButton;
  private int height = 220;
  private int width = 220;

  public WindowTest()
  {    
    panel = new JPanel();
    sizeButton = new JButton("Set Size");
    sizeButton.addActionListener(this);

    panel.add(sizeButton);

    add(panel);
    setSize(width, height); 
    setLocationRelativeTo(null);   
 }

 public void actionPerformed(ActionEvent ae)
 {
    height += 10;
    width += 10;

    this.setSize(width, height);
 }

 public static void main(String... args)
 {
    SwingUtilities.invokeLater(new Runnable()
    {
      public void run()
      {
         new WindowTest().setVisible(true);
      }
    });
 }
}

Надеюсь, это поможет, вам просто нужно запланировать задание для потока диспетчера событий, чтобы внести изменения в отображение графического интерфейса без всплывающих окон, как это делается в методе main.

Привет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...