【问题标题】:JDialog window don't ShowJDialog 窗口不显示
【发布时间】:2013-02-07 14:43:34
【问题描述】:

我有一个带有 addButton 的 JFrame。

当用户单击按钮时,必须显示 AddDialog 窗口,但我看不到它并且无法添加行

这是我的代码:

public class AddDialogS extends JDialog{
BookInformation bookinform=new BookInformation();

public AddDialogS(JFrame owner){
    super(owner,"Add New Book!", true);
    JButton OkButton=new JButton("Ok");
   final JTextField nameTF=new JTextField(10);
   final JTextField dateTF=new JTextField(10);
   final JTextField idTF=new JTextField(10);

    OkButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            bookinform.setBookName(nameTF.getText());
            bookinform.setBookDate(dateTF.getText());
            bookinform.setBookID(idTF.getText());
            AddDialogS.this.dispose();
        }
    });

    JPanel panel=new JPanel(new FlowLayout());
    panel.add(OkButton);
    panel.add(nameTF);
    panel.add(dateTF);
    panel.add(idTF);
}

public BookInformation getBookInfos(){
    return bookinform;
}
}

还有我的主课:

public class MainS extends JFrame{

   final AllBooks allBooks=new AllBooks();
   final JTable Btable=new JTable(allBooks);

   public MainS(){
       JButton AddBookButton=new JButton("Add New Book");
       AddBookButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) { 

           AddDialogS adddialog=new AddDialogS(MainS.this);
           BookInformation B_info=adddialog.getBookInfos();
           if(B_info != null){
               allBooks.AddRow(B_info);
           }
        }
    });

    JPanel Bpanel=new JPanel();
    Bpanel.setLayout(new FlowLayout());
    JScrollPane sp=new JScrollPane(Btable);
    Bpanel.add(sp);
    Bpanel.add(AddBookButton);
    this.add(Bpanel);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setBounds(300, 60, 550, 550);
    this.setVisible(true);
   }

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

它会在 jtable 中添加一个新行。

【问题讨论】:

  • 你忘了添加行,add(panel);/pack();/setVisible(true);, in your AddDislogS``类的构造函数。
  • 一些注意事项,1) 在EDT 上运行UI 2) 不要扩展JFrameJDialog。而是在类中创建一个JFrame 实例。

标签: java swing jtable jdialog


【解决方案1】:

您应该在主类的actionPerformed() 方法中添加dialog.setVisible(true);

public class MainS extends JFrame{
...
    public MainS(){
        AddDialogS adddialog=new AddDialogS(MainS.this);
        adddialog.setVisible(true);

        BookInformation B_info=adddialog.getBookInfos();
        ...

【讨论】:

  • 但在此之前,您必须将JPanel 也添加到JDialog 并调用它的pack() 方法。 +1 为 REST :-)
【解决方案2】:

仅仅创建JDialog 的对象不会显示它。您必须使用setVisible(true) 将其设置为可见。

我也看不到为您的对话框设置的大小。您可以为此使用setSize(width, height)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 2020-11-24
    • 2011-11-10
    • 2011-09-15
    • 2022-01-27
    • 2016-03-29
    相关资源
    最近更新 更多