gpt4 book ai didi

java - 透明度和 JPanel

转载 作者:行者123 更新时间:2023-12-02 05:11:38 25 4
gpt4 key购买 nike

我想在单击 JTable 上的编辑按钮时显示一个表单。显示的表单应与 JTable 重叠,并且应使 jTable 变暗(就像具有透明度的黑色背景一样)。我该怎么做呢 ?我是否必须在创建 JFrame 期间将 jPanel 添加到窗口,还是应该将面板创建为单独的文件并在单击按钮时使其可见。告诉我该怎么做?

编辑

类似的东西

enter image description here

编辑2

您已经使用了 JOption Pane ,另一个建议是使用 JDialog。但如果我使用其中任何一个,我都无法创建子窗口。我只需要从弹出的 Jdialog 窗口中调用虚拟键盘即可。我无法访问键盘,因为 JDialog 保持焦点。如何解决这个问题?

编辑3

当前的问题是,我正在使用虚拟键盘在使用 JDialog 显示的表单中键入值。现在我无法打开虚拟键盘并使其处于 Activity 状态。即使我打开它,它也在 JDialog 后面,并且焦点仍然在 JDialog 上。我需要关闭 JDialog 才能使用虚拟键盘。

最佳答案

我回答得有点晚,因为我正在创建一个测试程序,但我的想法与安德鲁的想法相同(对不起安德鲁,给安德鲁1+):

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class DarkBackground extends JPanel {
private static final Dimension MAIN_SIZE = new Dimension(800, 500);
private static final Color DarkColor = new Color(0, 0, 0, 60);
private JComponent glassPane;

public DarkBackground() {
JButton showDialogBtn = new JButton("Show Dialog");
showDialogBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setGlassPaneVisible(true);
JOptionPane.showMessageDialog(DarkBackground.this, "Foo");
setGlassPaneVisible(false);
}
});
add(showDialogBtn);
setPreferredSize(MAIN_SIZE);

}

public void setGlassPane(JComponent glassPane) {
JRootPane rootpane = SwingUtilities.getRootPane(this);
this.glassPane = glassPane;

rootpane.setGlassPane(glassPane);
}

public void setGlassPaneVisible(boolean visible) {
glassPane.setVisible(visible);
}

private static void createAndShowUI() {
DarkBackground darkBgrd = new DarkBackground();
JFrame frame = new JFrame("DarkBackground");
frame.getContentPane().add(darkBgrd);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
darkBgrd.setGlassPane(new MyGlassPane(DarkColor));
}

public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}

class MyGlassPane extends JComponent {
private Color backgroundColor;

public MyGlassPane(Color backgroundColor) {
this.backgroundColor = backgroundColor;
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(backgroundColor);
g.fillRect(0, 0, getWidth(), getHeight());
}
}

关于java - 透明度和 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5530088/

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