透明度和JPanel

Dee*_*pak 2 java swing jpanel jframe

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

编辑

类似的东西

在此输入图像描述

编辑2

您已使用JOption窗格,另一个建议是使用JDialog.但如果我使用其中任何一个我不能创建子窗口.我只需要从弹出的Jdialog窗口调用虚拟键盘.当JDialog保持焦点时,我无法访问键盘.如何解决这个问题?

编辑3

目前的问题是,我使用虚拟键盘输入使用JDialog显示的表单中的值.现在我无法打开虚拟键盘并使其处于活动状态.即使我打开它,它仍然是JDialog的后面,而焦点仍然是JDialog.我需要关闭JDialog才能使用虚拟键盘.

Hov*_*els 6

我有点晚了回答,因为我是创建一个测试程序,但我的想法是一样的安德鲁(对不起安德鲁,以及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());
   }
}
Run Code Online (Sandbox Code Playgroud)