как да открия mousereleased на границата на jframe?

в края на преоразмеряването на моя jframe (плъзгане на границата), трябва да знам кога потребителят пусне мишката върху границата, за да направя специфично лечение. Търсих, но изглежда, че всичко, което намерих, са по-сложни / специфични случаи.

import java.awt.*;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;

public class FrameDemo {

private static void createAndShowGUI() {
    JFrame frame = new JFrame("FrameDemo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JLabel emptyLabel = new JLabel("");
    emptyLabel.setPreferredSize(new Dimension(175, 100));
    frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);

    frame.pack();
    frame.setVisible(true);
    frame.addComponentListener(new ComponentAdapter() {
        @Override
        public void componentResized(ComponentEvent e) {
            System.out.println("componentResized");
            here I am resizing the components inside the contentPane, no interruption, it's ok
        }
    });
    frame.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseReleased(MouseEvent e) {
            System.out.println("released");
            **here I need to do specific action on a component but it is never fired**
        }
    });
}

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            createAndShowGUI();
        }
    });
}
}

person bill7511    schedule 28.09.2014    source източник


Отговори (2)


Възможен вариант е използването на:

Toolkit.getDefaultToolkit.setDynamicLayout(false) 

Това означава, че оформлението на рамката ще бъде направено само когато мишката бъде освободена, което означава, че събитието componentResized() се задейства само веднъж.

В противен случай ще трябва да използвате недекорирана рамка и след това да добавите обратно свой персонализиран код за рамка и преоразмеряване.

person camickr    schedule 29.09.2014

Според Trail: Създаване на GUI с JFC/Swing, използване на контейнери от най-високо ниво границата не е част от JFrame.

Как се правят рамки (основен Windows): " Рамката [...] е прозорец, който има декорации като рамка" ... "По подразбиране декорациите на прозорците се доставят от основната система за прозорци."

person Gerold Broser    schedule 28.09.2014