2013-11-14 2 views
0

Я пытаюсь получить JDialog, чтобы «всплывать», когда я нажимаю JCheckBox (если это не так). Я хочу использовать это как кнопку. Я надеюсь, что опубликую это право, мое первое сообщение здесь :)Пытается использовать JCheckBox как JButton (Java Swing)

Я получаю сообщение об ошибке, в котором говорится, что я не могу отличить JCheckBox от JButton. Можете ли вы помочь мне сделать это правильно?

упаковка модель;

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; 

public class FirstJDialog extends JDialog 
{ 
    private Controller controller; 

    private HotelJDialog hotelJDialog; 
    private PartnerJDialog partnerJDialog; 

    private JLabel lblName, lblArrival, lblDeparture, lblLekture, lblHotel, lblPartner; 
    private JTextField txfName, txfArrival, txfDeparture; 
    private JCheckBox ckbLekture, ckbHotel, ckbPartner; 

    public FirstJDialog() 
    { 
     this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 
     this.setTitle("Person informationer"); 
     this.setLayout(null); 
     this.setSize(900, 650); 
     this.setLocation(500, 200); 
     this.setResizable(false); 

     // Labels for TextField ###################################################################### 
     lblName = new JLabel("Navn:"); 
     this.add(lblName); 
     this.lblName.setSize(100, 40); 
     this.lblName.setLocation(25, 25); 

     lblArrival = new JLabel("Ankomst:"); 
     this.add(lblArrival); 
     this.lblArrival.setSize(100, 40); 
     this.lblArrival.setLocation(25, 70); 

     lblDeparture = new JLabel("Afgang:"); 
     this.add(lblDeparture); 
     this.lblDeparture.setSize(100, 40); 
     this.lblDeparture.setLocation(25, 115); 

     // TextField ###################################################################### 
     txfName = new JTextField(); 
     this.add(txfName); 
     this.txfName.setSize(200, 40); 
     this.txfName.setLocation(180, 25); 

     txfArrival = new JTextField(); 
     this.add(txfArrival); 
     this.txfArrival.setSize(200, 40); 
     this.txfArrival.setLocation(180, 70); 

     txfDeparture = new JTextField(); 
     this.add(txfDeparture); 
     this.txfDeparture.setSize(200, 40); 
     this.txfDeparture.setLocation(180, 115); 

     // CheckBox ###################################################################### 
     ckbLekture = new JCheckBox(); 
     this.add(ckbLekture); 
     this.ckbLekture.setSize(25, 25); 
     this.ckbLekture.setLocation(25, 200); 

     ckbHotel = new JCheckBox(); 
     this.add(ckbHotel); 
     this.ckbHotel.setSize(25, 25); 
     this.ckbHotel.setLocation(25, 250); 

     ckbPartner = new JCheckBox(); 
     this.add(ckbPartner); 
     this.ckbPartner.setSize(25, 25); 
     this.ckbPartner.setLocation(25, 300); 

     // Labels for CheckBox ###################################################################### 
     lblLekture = new JLabel("Foredrag"); 
     this.add(lblLekture); 
     this.lblLekture.setSize(100, 40); 
     this.lblLekture.setLocation(125, 190); 

     lblHotel = new JLabel("Hotel"); 
     this.add(lblHotel); 
     this.lblHotel.setSize(100, 40); 
     this.lblHotel.setLocation(125, 240); 

     lblPartner = new JLabel("Ledsager"); 
     this.add(lblPartner); 
     this.lblPartner.setSize(100, 40); 
     this.lblPartner.setLocation(125, 290); 

     // JDialogs ###################################################################### 
     hotelJDialog = new HotelJDialog(); 
     partnerJDialog = new PartnerJDialog(); 

     controller = new Controller(); 
     ckbHotel.addActionListener(controller); 
    } 

    private class Controller implements ActionListener 
    {     

     public void actionPerformed(ActionEvent e) 
     { 
      JButton source = (JButton) e.getSource(); 
      JCheckBox sourxe = (JCheckBox) e.getSource(); 
      if(sourxe.equals(ckbHotel)) 
       hotelJDialog.setVisible(true); 
     } 
    } 
+0

1) Java ГПИ, возможно, придется работать на нескольких платформах, на разных разрешениях экрана и с использованием различных PLAFs. Таким образом, они не способствуют точному размещению компонентов. Чтобы организовать компоненты для надежного графического интерфейса, вместо этого используйте менеджеров компоновки или [их комбинаций] (http://stackoverflow.com/a/5630271/418556), а также макеты и границы для [пробела] (http: //stackoverflow.com/q/17874717/418556). 2) Чтобы получить более эффективную помощь, опубликуйте [SSCCE] (http://sscce.org/). –

ответ

2

ошибка является результатом попытки бросить JCheckBox к JButton. Этот листок не нужен, так как вы никогда не регистрируете этого слушателя любым JButton, только с ckbHotel, который является JCheckBox.

В данном примере, нет никакой необходимости, чтобы бросить, вы можете просто проверить источник:

if(ckbHotel.equals(e.getSource())) 
    hotelJDialog.setVisible(true); 

Вы также можете зарегистрировать другой слушатель действия для этого флажка. Там нет необходимости иметь один слушатель действия для обслуживания всех элементов управления в контейнере, например:

ckbHotel.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     hotelJDialog.setVisible(true); 
    } 
}); 
+1

Это сработало Спасибо большое :) – user2993005

+0

Добро пожаловать! :) – tenorsax

0
JButton source = (JButton) e.getSource(); 

эта линия даст эту ошибку. удалить это анс добавить

JCheckBox sourxe = (JCheckBox) e.getSource(); 
if(sourxe.isSelected()) 
     hotelJDialog.setVisible(true); 

это только покажет ваш диалог, если выбран sourxe ..

+0

Спасибо за ваш ответ :) – user2993005

 Смежные вопросы

  • Нет связанных вопросов^_^