Прозрачность и JPanel - PullRequest
       15

Прозрачность и JPanel

2 голосов
/ 03 апреля 2011

Я хочу показать форму, когда нажимаю кнопку редактирования на JTable.Отображаемая форма должна перекрывать JTable и затемнять jTable (как черный фон с прозрачностью).Как мне это сделать ?Должен ли я добавить jPanel в окно во время создания JFrame или я должен создать панель в виде отдельного файла и сделать ее видимой при нажатии кнопки.Подскажите как это сделать?

РЕДАКТИРОВАТЬ

Что-то похожее на это

enter image description here

РЕДАКТИРОВАТЬ 2

Вы использовалиПанель JOption и другое предложение заключалось в использовании JDialog.Но если я использую любой из них, я не могу создать дочернее окно.Мне просто нужно вызвать виртуальную клавиатуру из всплывающего окна Jdialog.Я не могу получить доступ к клавиатуре, поскольку JDialog удерживает фокус.Как решить эту проблему?

РЕДАКТИРОВАТЬ 3

В настоящее время проблема заключается в том, что я использую виртуальную клавиатуру для ввода значений в форме, отображаемой с помощью JDialog.Теперь я не могу открыть виртуальную клавиатуру и сделать ее активной.Даже если я открою его, он находится за JDialog, и фокус по-прежнему с JDialog.Мне нужно закрыть JDialog для использования виртуальной клавиатуры.

Ответы [ 2 ]

6 голосов
/ 03 апреля 2011

Я немного опоздал с ответом, когда создавал тестовую программу, но моя идея такая же, как у Эндрю (извините Эндрю, и 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());
   }
}
4 голосов
/ 03 апреля 2011

См. Как использовать корневые панели в руководстве по Java. На снимке экрана, который появляется на экране, вам нужно добавить JOptionPane (или JDialog) для ввода и нарисовать штриховку на стеклянной панели.

...