首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jDialog未显示

jDialog未显示
EN

Stack Overflow用户
提问于 2014-08-30 13:44:26
回答 1查看 4.4K关注 0票数 2

我尝试将我的jPanel添加到jDialog中,当我触发按钮时,什么都不会发生。为什么?我有下面的代码: public class fontFormat{

代码语言:javascript
复制
public void fontPanel(){

    JPanel panel = new JPanel();
    panel.setLayout(new FlowLayout());

    panel.getPreferredSize();
    Dimension size = new Dimension();

    size.width = 400;
    size.height = 600;

    panel.setPreferredSize(size);

    panel.add(new JLabel("label"));
    panel.add(new JButton("button"));


    JDialog fontDialog = new JDialog();

    fontDialog.add(fontDialog);
 }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-30 13:45:32

在此:

代码语言:javascript
复制
JDialog fontDialog = new JDialog();
fontDialog.add(fontDialog);

您似乎试图将您的JDialog添加到自身,这应该会导致您的代码不起作用。虽然这段代码可以编译,但是运行此方法应该会导致JVM在fontDialog.add(fontDialog);行上抛出一个fontDialog.add(fontDialog);

请注意,您显示的JDialog与显示JFrame的方式类似:

  • 当您调用您的JDialog构造函数时,您将希望将父窗口传递到它,特别是如果您希望显示一个模态对话框。
  • 您还需要将正确的ModalityType枚举传递给构造函数。
  • 给出JDialog内容,通常是一个包含组件的JPanel。
  • 你把它打包
  • 然后在上面调用setVisible(true),它应该显示

例如,

代码语言:javascript
复制
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class DialogEg {
   private static void createAndShowGUI() {
      MainPanelGen mainPanelGen = new MainPanelGen();

      JFrame frame = new JFrame("DialogEg");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(mainPanelGen.getMainPanel());
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

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

}

class MainPanelGen {
   private JPanel mainPanel = new JPanel();
   private JTextField field = new JTextField(10);
   private JButton btn = new JButton(new BtnActn());
   private JDialog dialog;
   private DialogPanel dialogPanel = new DialogPanel();

   public MainPanelGen() {
      mainPanel.add(field);
      mainPanel.add(btn);

      field.setEditable(false);
      field.setFocusable(false);
   }

   public JPanel getMainPanel() {
      return mainPanel;
   }

   private class BtnActn extends AbstractAction {
      BtnActn() {
         super("Button");
      }

      @Override
      public void actionPerformed(ActionEvent arg0) {
         if (dialog == null) {
            Window win = SwingUtilities.getWindowAncestor(mainPanel);
            if (win != null) {
               dialog = new JDialog(win, "My Dialog",
                     Dialog.ModalityType.APPLICATION_MODAL);
               dialog.getContentPane().add(dialogPanel);
               dialog.pack();
               dialog.setLocationRelativeTo(null);
            }
         }
         dialog.setVisible(true); // here the modal dialog takes over
         System.out.println   (dialogPanel.getFieldText());
         field.setText(dialogPanel.getFieldText());
      }
   }
}

class DialogPanel extends JPanel {
   private JTextField field = new JTextField(10);
   private JButton exitBtn = new JButton(new ExitBtnAxn("Exit"));

   public DialogPanel() {
      add(field);
      add(exitBtn);
   }

   public String getFieldText() {
      return field.getText();
   }

   private class ExitBtnAxn extends AbstractAction {

      public ExitBtnAxn(String name) {
         super(name);
      }

      @Override
      public void actionPerformed(ActionEvent arg0) {
         Window win = SwingUtilities.getWindowAncestor(DialogPanel.this);
         if (win != null) {
            win.dispose();
         }

      }
   }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25583002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档