Java 从外部jpanel类中移动JFrame
我试图通过外部jpanel类触发的事件在窗口上移动jframe,下面是我的代码,但没有实现这一点。取而代之的是正在移动的面板 我做错了什么?我一般是新编程的Java 从外部jpanel类中移动JFrame,java,swing,Java,Swing,我试图通过外部jpanel类触发的事件在窗口上移动jframe,下面是我的代码,但没有实现这一点。取而代之的是正在移动的面板 我做错了什么?我一般是新编程的 package casuls_app; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Titlebar extends JPanel { public Titlebar() { btn
package casuls_app;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Titlebar extends JPanel {
public Titlebar() {
btnClose =new JButton("X");
btnClose.setFocusable(false);
btnClose.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
closeButtonPressed(e);
}
}
);
controlBox =new JPanel(new GridLayout(1,1));
controlBox.setPreferredSize(new Dimension(150,40));
controlBox.add(btnClose);
controlBox.setBackground(new Color(255,255,255));
setLayout(new BorderLayout());
add(controlBox,BorderLayout.EAST);
setPreferredSize(new Dimension(0,40));
setBackground(new Color(60, 173, 205));
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
mousePressedOnTitlebar(e);
}
}
);
addMouseMotionListener(new MouseAdapter() {
public void mouseDragged(MouseEvent e) {
mouseDraggedOnTitlebar(e);
}
}
);
}
private void mousePressedOnTitlebar(MouseEvent e) {
posX= e.getX();
posY=e.getY();
}
private void mouseDraggedOnTitlebar(MouseEvent e) {
setLocation(e.getXOnScreen() -posX, e.getYOnScreen() -posY);
}
private void closeButtonPressed(ActionEvent e){
System.exit(0);
}
//Variables declaration
private int posX,posY;
private JButton btnClose;
private JPanel controlBox;
}
setLocation()设置JPanel的位置(因为您的类扩展了JPanel)。
如果有对JFrame的引用,则可以调用该对象上的setLocation方法
frame.setLocation(x, y);
如果没有引用,则可以按照以下步骤通过SwingUtilities访问帧:
JFrame topFrame = (JFrame) SwingUtilities.getWindowAncestor(this);
这是stackoverflow,这很有效。