gpt4 book ai didi

java - 如何移动 JPanel

转载 作者:搜寻专家 更新时间:2023-10-31 19:40:30 25 4
gpt4 key购买 nike

我有一个 JDialog,其中包含 JPanel 和其他元素,例如 JTextField。我想在 JDialog 加载到屏幕后将其从一个位置移动到另一个位置。当我尝试使用 jdialog.setLocation() 时,我无法移动 JDialog 并且添加到其中的所有其他组件都变得不可见。

谁能告诉我我的方法可能有什么问题?

最佳答案

关于 Gilbert 断言对话框在设置为可见后无法移动,请运行此命令:

import java.awt.Component;
import java.awt.Dialog.ModalityType;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class MovingDialog {
private static void createAndShowGui() {
JPanel panel = new JPanel();
panel.add(new JButton(new ShowMovingDialogAction()));
JFrame frame = new JFrame("MovingDialog");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

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

class ShowMovingDialogAction extends AbstractAction {
private JPanel panel = new JPanel();

public ShowMovingDialogAction() {
super("Show Moving Dialog");
panel.add(new JLabel("label"));
panel.add(new JTextField("TextField", 10));
panel.add(new JButton("Button"));
}

@Override
public void actionPerformed(ActionEvent e) {
JFrame owner = (JFrame) SwingUtilities.getWindowAncestor((Component) e
.getSource());
final JDialog dialog = new JDialog(owner, "Dialog",
ModalityType.APPLICATION_MODAL);
dialog.getContentPane().add(panel);
dialog.pack();
dialog.setLocation(0, 0);

int delay = 20;
new Timer(delay , new ActionListener() {
int x = 0;
int y = 0;
Dimension scrn = Toolkit.getDefaultToolkit().getScreenSize();

@Override
public void actionPerformed(ActionEvent e) {
int maxX = scrn.width - dialog.getWidth();
int maxY = scrn.height - dialog.getHeight();
if (x < maxX && y < maxY) {
x++;
y++;
dialog.setLocation(x, y);
} else {
((Timer)e.getSource()).stop();
}
}
}).start();

dialog.setVisible(true);

}
}

请注意,动画 Swing Timer 必须 在调用 setVisible(true) 之前启动。也许这就是吉尔伯特所指的。

关于java - 如何移动 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12115275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com