gpt4 book ai didi

java - 如何使 JDialog 处于非 Activity 状态

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

我想让基于 JDialog 的窗口处于非 Activity 状态,因此所有控件都被禁用(灰色)。 setEnabled(false) 只是使无法单击任何控件,甚至无法关闭窗口。但没有什么会变灰。请帮忙。

编辑:这是示例代码。

import javax.swing.JButton;
import javax.swing.JDialog;


public class Analyzer extends JDialog{

public Analyzer() {
JButton but = new JButton("test");
setLayout(null);
but.setBounds(10,10,100,100);

add(but);
setSize( 200, 200);
setVisible(true);
setEnabled(false);
}

public static void main(String[] args) {
new Analyzer();
}

}

最佳答案

我知道有两种方法可以做到这一点,一种是递归地禁用对话框的组件,另一种是禁用整个对话框(包括拖动对话框的能力):

import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;

import javax.swing.*;

@SuppressWarnings("serial")
public class DisableEg extends JPanel {
public static final String DISABLE_DIALOG_COMPONENTS = "Disable Dialog Components";
public static final String ENABLE_DIALOG_COMPONENTS = "Enable Dialog Components";
public static final String DISABLE_DIALOG = "Disable Dialog";
public static final String ENABLE_DIALOG = "Enable Dialog";
private static final int LOC_SHIFT = 150;
private Analyzer analyzer;

public DisableEg(JFrame frame) {
analyzer = new Analyzer(frame);
analyzer.pack();
analyzer.setLocationRelativeTo(frame);
Point location = analyzer.getLocation();
location = new Point(location.x - LOC_SHIFT, location.y - LOC_SHIFT);
analyzer.setLocation(location);
analyzer.setVisible(true);

add(new JButton(new AbstractAction(DISABLE_DIALOG_COMPONENTS) {

@Override
public void actionPerformed(ActionEvent evt) {
AbstractButton btn = (AbstractButton) evt.getSource();
if (btn.getText().equals(DISABLE_DIALOG_COMPONENTS)) {
btn.setText(ENABLE_DIALOG_COMPONENTS);
analyzer.setComponentEnabled(false);
} else {
btn.setText(DISABLE_DIALOG_COMPONENTS);
analyzer.setComponentEnabled(true);
}
}
}));
add(new JButton(new AbstractAction(DISABLE_DIALOG) {

@Override
public void actionPerformed(ActionEvent evt) {
AbstractButton btn = (AbstractButton) evt.getSource();
if (btn.getText().equals(DISABLE_DIALOG)) {
btn.setText(ENABLE_DIALOG);
analyzer.setEnabled(false);
} else {
btn.setText(DISABLE_DIALOG);
analyzer.setEnabled(true);
}
}
}));
}

private static void createAndShowGui() {
JFrame frame = new JFrame("Disable Example");
DisableEg mainPanel = new DisableEg(frame);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

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

@SuppressWarnings("serial")
class Analyzer extends JDialog {

public Analyzer(JFrame frame) {
super(frame, "Analyzer Dialog", false);
JButton but = new JButton("test");
setLayout(new FlowLayout());

add(but);
setPreferredSize(new Dimension(200, 200));
}

public void setComponentEnabled(boolean enabled) {
setComponentEnabled(enabled, getContentPane());

// !! if you have menus to disable, you may need instead
// setComponentEnabled(enabled, this); // !!
}

private void setComponentEnabled(boolean enabled, Component component) {
component.setEnabled(enabled);
if (component instanceof Container) {
Component[] components = ((Container) component).getComponents();
if (components != null && components.length > 0) {
for (Component heldComponent : components) {
setComponentEnabled(enabled, heldComponent);
}
}
}
}

}

关于java - 如何使 JDialog 处于非 Activity 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9414886/

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