Java 用于透明效果的成形jdialog导致拖动问题
我通过添加透明效果创建了成形JDialog 后退背景(新颜色(0,0,0,0);但它也会在内部向对话框添加拖动侦听器,问题是,当我们通过对话框中的任何其他组件(如JTextfield、JList等)拖动时,整个窗口仍然可以拖动。因此需要避免向jdialog添加内部拖动侦听器。请任何人帮助我,这是我的代码Java 用于透明效果的成形jdialog导致拖动问题,java,macos,swing,transparency,jdialog,Java,Macos,Swing,Transparency,Jdialog,我通过添加透明效果创建了成形JDialog 后退背景(新颜色(0,0,0,0);但它也会在内部向对话框添加拖动侦听器,问题是,当我们通过对话框中的任何其他组件(如JTextfield、JList等)拖动时,整个窗口仍然可以拖动。因此需要避免向jdialog添加内部拖动侦听器。请任何人帮助我,这是我的代码 import java.awt.Color; import java.awt.image.BufferedImage; import java.io.File; import java.io.I
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);
}
});
}
}
提前感谢,,
当做
Bharath SR不确定我是否完全理解您的要求,甚至您的问题,但听起来您想要的是一个没有框架、只有背景图像和组件的可拖动对话框,并且您不希望组件触发拖动事件 试试看。希望这就是你想要的。请随意提问
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();
}
});
}
}
除了鼠标从对话框中的某个组件开始拖动外,您是否只想从任何初始点拖动对话框?我可能无法正确理解您的问题是的,绝对可以。我不想从主jdialog中任何其他组件的起始点拖动透明jdialog。如果我按components(添加到jdialog中)并拖动,它不应该拖动。我尝试了使用您的代码,但我的要求是向jdialog中添加任何图像,并通过setBackground(新颜色(0,0,0,0)使其透明;现在添加任何组件,如jtextfield、jlist或jbutton。不要添加任何拖动侦听器..但当您通过按任何组件拖动窗口时,它可以拖动..但它不应按组件拖动(按住并拖动)…不幸的是,它的拖动..如果您删除setBackground(新颜色(0、0、0、0);那么它工作得很好,但是透明度没有增加到jdialog中。。我希望您理解我的要求,并感谢您宝贵的回复。以我的示例来说,当您尝试按组件拖动对话框时,对话框不会拖动。哦。。很抱歉,我这么说。它适用于MicroSoft windows机器,但不适用于mac机器。(问题就在我告诉你的时候),可能是mac平台的问题。。