gpt4 book ai didi

带最大化按钮的java模态框架

转载 作者:行者123 更新时间:2023-12-02 06:20:47 24 4
gpt4 key购买 nike

我想知道是否可能:

  1. 制作一个带有最大化按钮的jdialog(可以是模态的)(是否可以自定义但会最大化框架?)
  2. 或者使 jframe (具有默认的最大化按钮)模态?

有很多关于这个的话题,但我没有找到干净的解决方案。仅使用 setEnabled() 等技巧。

提前感谢大家!

最佳答案

  • 据我所知不可能,因为顶级容器来自 native 操作系统,

  • 然后鼠标双击 JFrame 的工具栏调整容器大小以填充整个屏幕尺寸,第二次双击恢复最后已知的尺寸

  • 这对于 JDialog 是不可能的

  • 任何 Mouse(Xxx)Listener 都不响应来自 native 操作系统的工具栏的 mouse_events,仅响应填充 RootPane 的工具栏的 mouse_events

代码示例

import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Toolkit;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import javax.swing.JDialog;
import javax.swing.Timer;
//http://stackoverflow.com/questions/8670297/make-java-swing-modal-dialog-behave-like-mac-osx-dialogs
public class ModalDialogDemoFrame extends JFrame {

private static final long serialVersionUID = 1L;
private ModalDialogDemoFrame modalDialogDemo;

public ModalDialogDemoFrame() {
modalDialogDemo = this;
setBounds(100, 100, 400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton buttonDialog = new JButton("Open Dialog");
buttonDialog.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent arg0) {
// Create a Modal Dialog with this Frame as Parent.
ModalDialog modalDialog = new ModalDialog(modalDialogDemo, true);
modalDialog.setVisible(true);
}
});
getContentPane().add(buttonDialog, BorderLayout.CENTER);
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {

public void run() {
try {
ModalDialogDemoFrame window = new ModalDialogDemoFrame();
window.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
//http://stackoverflow.com/questions/4577424/distinguish-between-a-single-click-and-a-double-click-in-java/4577475#4577475
class ClickListener extends MouseAdapter implements ActionListener {

private final static int clickInterval = (Integer) Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval");
private MouseEvent lastEvent;
private Timer timer;

public ClickListener() {
this(clickInterval);
}

public ClickListener(int delay) {
timer = new Timer(delay, this);
}

@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() > 2) {
return;
}
lastEvent = e;
if (timer.isRunning()) {
timer.stop();
doubleClick(lastEvent);
} else {
timer.restart();
}
}

@Override
public void actionPerformed(ActionEvent e) {
timer.stop();
singleClick(lastEvent);
}

public void singleClick(MouseEvent e) {
}

public void doubleClick(MouseEvent e) {
}
}

class ModalDialog extends JDialog {

private static final long serialVersionUID = 1L;

public ModalDialog(JFrame parent, boolean modal) {
Dimension dimensionParentFrame = parent.getSize();
setSize(new Dimension((parent == null) ? 300 : dimensionParentFrame.width / 2, 75));
Dimension dimensionDialog = getSize();
int x = parent.getX() + ((dimensionParentFrame.width - dimensionDialog.width) / 2);
setLocation(x, parent.getY() + parent.getInsets().top);
//setUndecorated(true);
setModal(modal);
setModalityType(ModalityType.APPLICATION_MODAL);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
JButton buttonClose = new JButton("Close");
buttonClose.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
dispose();
}
});
add(buttonClose, BorderLayout.CENTER); // comment for listening
addMouseListener(new ClickListener() {

@Override
public void singleClick(MouseEvent e) {
System.out.println("single");
}

@Override
public void doubleClick(MouseEvent e) {
System.out.println("double");
}
});
}
}

关于带最大化按钮的java模态框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10617850/

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