2012-11-08 1 views
3

!!!!! И я нашел большую проблему, я переписываю метод isModal, который уже предопределен, поэтому он не будет удерживать и ждать ввода пользователя! похлопать себя в лицо сейчас:) !!!!!!Mac OS JDialog не приостанавливает выполнение, даже если модальный

im делает проект в школе о графическом интерфейсе. Основной темой на данный момент является 4-слойный архитектор, здесь мы должны использовать JDialog для ввода информации о человеке и, тем самым, обновить JList в JFrame программы.

Моя проблема заключается в том, что, когда я использую кнопку «Добавить человека», JDialog устанавливается как видимым, так и модальным, поэтому он должен ждать с обновлением JList на JFrame после нажатия пользователем кнопки добавления на JDialog.

Но но это не работало, я общался со многими учителями об этом, и они не могут понять, почему это не сработает.

Дополнительная информация о том, что я программирую на Mac, но если программа работает на машине с Windows, она работает.

Я попытался найти конкретную проблему в Интернете, но не нашел ничего, что связано с проблемами JDialog java на Mac.

Есть ли у вас кто-нибудь, у кого есть опыт?

JFrame:

package gui; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JList; 
import javax.swing.JScrollPane; 
import javax.swing.ListSelectionModel; 
import javax.swing.event.ListSelectionEvent; 

import model.Person; 
import service.Service; 

public class MainFrame extends JFrame { 

private JList<Person> jlList; 
private JScrollPane jsrPane; 
private JButton addButton, updateButton; 
private Controller controller; 
private MyDialog myDialog; 

public MainFrame(){ 
    controller = new Controller(); 

    this.setTitle("Marks lille MainFrame."); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setSize(800, 600); 
    this.setLocation(300, 200); 
    this.setLayout(null); 

    jlList = new JList<>(); 
    jlList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 

    jsrPane = new JScrollPane(jlList); 
    jsrPane.setBounds(10, 10, 400, 500); 
    this.add(jsrPane); 

    addButton = new JButton("Add Person"); 
    addButton.setBounds(420, 110, 100, 25); 
    addButton.addActionListener(controller); 
    this.add(addButton); 

    updateButton = new JButton("Update"); 
    updateButton.setBounds(420, 150, 100, 25); 
    updateButton.addActionListener(controller); 
    this.add(updateButton); 
} 

private class Controller implements ActionListener{ 
    public void actionPerformed(ActionEvent ae){ 
     if(ae.getSource().equals(addButton)){ 
      myDialog = new MyDialog("Add Person"); 
      myDialog.setVisible(true); 
      System.out.println("Test"); 
      if(myDialog.isModal()){ 
       jlList.setListData(Service.getPersons().toArray(new Person[0])); 
      } 
      System.out.println("Test"); 
     }else if(ae.getSource().equals(updateButton)){ 
      Person ps = jlList.getSelectedValue(); 
      myDialog = new MyDialog("Update Person"); 
      myDialog.setVisible(true); 
      if(myDialog.isModal()){ 
       Service.removePerson(ps); 
       jlList.setListData(Service.getPersons().toArray(new Person[0])); 
      } 
     } 
    } 
} 
} 

JDialog:

package gui; 


import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JCheckBox; 
import javax.swing.JDialog; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 

import service.Service; 

public class MyDialog extends JDialog { 


private JButton okButton, cancelButton; 
private JLabel lblName, lblTitle; 
private JTextField txfName, txfTitle; 
private JCheckBox ckbRetire; 
private Controller controller; 
private boolean modalResult; 

public MyDialog(String title){ 
    controller = new Controller(); 

    this.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); 
    this.setTitle(title); 
    setModalityType(JDialog.DEFAULT_MODALITY_TYPE); 
    this.setLayout(null); 
    this.setSize(300, 300); 
    this.setLocation(300, 200); 

    okButton = new JButton("Add"); 
    okButton.setBounds(100, 250, 80, 25); 
    okButton.addActionListener(controller); 
    this.add(okButton); 

    cancelButton = new JButton("Cancel"); 
    cancelButton.setBounds(180, 250, 80, 25); 
    cancelButton.addActionListener(controller); 
    this.add(cancelButton); 

    lblName = new JLabel("Name:"); 
    lblName.setBounds(10, 10, 100, 25); 
    this.add(lblName); 

    txfName = new JTextField(); 
    txfName.setBounds(5, 35, 200, 25); 
    this.add(txfName); 

    lblTitle = new JLabel("Title:"); 
    lblTitle.setBounds(10, 70, 100, 25); 
    this.add(lblTitle); 

    txfTitle = new JTextField(); 
    txfTitle.setBounds(5, 95, 200, 25); 
    this.add(txfTitle); 

    ckbRetire = new JCheckBox("retired"); 
    ckbRetire.setBounds(10, 150, 100, 25); 
    this.add(ckbRetire); 
} 

private class Controller implements ActionListener{ 
    public void actionPerformed(ActionEvent ae){ 
     if(ae.getSource().equals(okButton)){ 
      String name = txfName.getText().trim(); 
      String title = txfTitle.getText().trim(); 
      boolean retired = ckbRetire.isSelected(); 

      Service.createPerson(name, title, retired); 
      modalResult = true; 
      MyDialog.this.setVisible(false); 

     }else if(ae.getSource().equals(cancelButton)){ 
      modalResult = false; 
      MyDialog.this.setVisible(false); 
     } 
    } 
} 

public boolean isModal(){ 
    return modalResult; 
} 

} 

Основной метод:

package gui; 



public class MainFrameApp { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    MainFrame frame = new MainFrame(); 

    frame.setVisible(true); 

} 

} 

Если вам нужно обслуживание, DAO и модель классов, дайте мне знать.

Edit # 1: Бег на Java строить 1.7.0_09-b05

Edit # 2: Пробовал установка супер к JDialog, и установив JFrame как супер. Пробовал setModal, хотя он устарел. Пробовал устанавливать модальный при вызове JDialog, все еще нет succes

+1

И я нашел большую проблему, я переписываю метод isModal, который уже предопределен, поэтому он не будет держать и ждать ввода пользователя! похлопать себя в лицо сейчас :) – Mark

ответ

1

И я нашел большую проблему, я переписываю метод isModal, который уже предопределен, поэтому он не будет удерживать и ждать ввода пользователя! похлопать себя в лицо сейчас :)