jdialog в форме для эффекта прозрачности, вызывающего проблему перетаскивания

1

Я создал форму JDialog, добавив эффект прозрачности с помощью setBackground (новый цвет (0, 0, 0, 0), но он также добавляет прослушиватель перетаскивания в диалог внутри, проблема в том, что мы перетаскиваем любой другой компонент в диалоговом окне, например JTextfield, JList и т.д., Тем не менее, полное окно может перетаскивать, поэтому вам нужно избегать добавления внутреннего прослушивателя перетаскивания в jdialog. Пожалуйста, помогите мне в этом, вот мой код.

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class MyWindow extends JDialog {

    private static final long serialVersionUID = 1L;

    public MyWindow() {
        JTextField text = new JTextField();
        BufferedImage myPicture = null;
        try {
            myPicture = ImageIO.read(new File("background.png"));
        } catch (IOException e) {
        }
        JLabel label = new JLabel(new ImageIcon(myPicture));
        setUndecorated(true);
        setResizable(false);
        setBackground(new Color(0, 0, 0, 0));   // creating issue
        setSize(243, 474);
        text.setBounds(18, 64, 212, 368);
        add(text);
        add(label);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                MyWindow win = new MyWindow();
                win.setVisible(true);
            }
        });
    }
}

Заранее спасибо, С уважением, Бхарат С.Р.

  • 0
    Вы просто хотите иметь возможность перетаскивать диалог из любой начальной точки, кроме случаев, когда перетаскивание мыши начинается с компонента внутри диалога? Я не правильно понимаю ваш вопрос
  • 0
    Да, абсолютно .. Я не хочу перетаскивать прозрачный jdialog из начальной точки любых других компонентов, которые находятся в основном jdialog ... если я нажимаю компоненты (которые добавляются в jdialog) и перетаскиваю, он не должен перетаскивать ,
Теги:
macos
swing
transparency
jdialog

1 ответ

0

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

Попробуй. Надеюсь, это то, что вы ищете. Не стесняйтесь задавать вопросы.

import java.awt.Color;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.io.IOException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class DragDialog extends JDialog {

    private int pointX;
    private int pointY;

    public DragDialog() {
        JLabel backgroundLabel = createBackgroundLabel();
        JTextField textField = createTextField();
        setContentPane(backgroundLabel);
        add(textField);
        setUndecorated(true);
        setBackground(new Color(0, 0, 0, 0));
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    private JTextField createTextField() {
        final JTextField field = new JTextField(20);
        field.setText("Type \"exit\" to terminate.");
        field.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                String text = field.getText();
                if ("exit".equalsIgnoreCase(text)) {
                    System.exit(0);
                }
            }
        });
        return field;
    }

    private JLabel createBackgroundLabel() {
        Image image = null;
        try {
            image = ImageIO.read(new URL("http://satyajit.ranjeev.in/images/icons/stackoverflow.png"));
        } catch (IOException ex) {
            Logger.getLogger(DragDialog.class.getName()).log(Level.SEVERE, null, ex);
        }
        JLabel label = new JLabel(new ImageIcon(image));
        label.setLayout(new GridBagLayout());

        label.addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseDragged(MouseEvent e) {
                DragDialog.this.setLocation(DragDialog.this.getLocation().x + e.getX() - pointX,
                        DragDialog.this.getLocation().y + e.getY() - pointY);
            }
        });
        label.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
                pointX = e.getX();
                pointY = e.getY();
            }
        });

        return label;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new DragDialog();
            }
        });
    }
}
  • 0
    Я пробовал с вашим кодом, но мое требование - добавить любое изображение в jdialog и сделать его прозрачным с помощью setBackground (new Color (0, 0, 0, 0); теперь добавлять любые компоненты, такие как jtextfield или jlist или jbutton. добавить любой слушатель перетаскивания ... но когда вы перетаскиваете окно, нажимая любой из компонентов, он может перетаскивать ... но он не должен перетаскивать по компонентам (удерживайте и перетаскивайте) .. к сожалению, его перетаскивание ... если вы удалите setBackground (новый цвет (0, 0, 0, 0); тогда он работает отлично, но прозрачность не добавляет к jdialog ... надеюсь, вы поняли мое требование, и спасибо за ваш ценный ответ.
  • 0
    В моем примере диалоговое окно не перетаскивается при попытке перетаскивания компонентами.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню