2016-04-13 14 views
0

Java'ya yeni geliyorum. Aşağıdaki kodum boş bir pencere açıyor.Java - Boş pencere

Neler olup bittiği konusunda bana yardımcı olabilecek herkes var mı?

Hatanın ActionListeners'ta olduğunu düşünüyorum.

public static void main(String[] args) { 


     JFrame frame = new JFrame(); 
     frame.setTitle("Listeners"); 
     frame.setSize(400, 200); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
     frame.setLayout(new BorderLayout()); 

     JTextArea txtArea = new JTextArea(); 
     HelloActionListener hlisten = new HelloActionListener(txtArea); 
     JButton bl = new JButton("TOP"); 
     bl.addActionListener((ActionListener) hlisten); 
     JButton b2 = new JButton("LEFT"); 
     ActionListener rightListener = (ActionEvent e) -> { 
      txtArea.setText("Yes,let's go Left"); 
     }; 
    b2.addActionListener(rightListener); 
    JButton b3 = new JButton("RIGHT"); 
    b3.addActionListener((ActionEvent e) -> { 
       txtArea.setText("Sorry, we cant go Right"); 
     }); 

    JButton b4 = new JButton("Bottom"); 
    b4.addActionListener((ActionListener) hlisten); 

    frame.add(bl, BorderLayout.PAGE_START); 
    frame.add(b2, BorderLayout.LINE_START); 
    frame.add(b3, BorderLayout.LINE_END); 
    frame.add(b4, BorderLayout.PAGE_END); 
    frame.add(txtArea, BorderLayout.CENTER); 
      frame.setVisible(true); 
} 
+0

lütfen HelloActionListener sınıfını –

+1

numaranız yoksa, kodunuzda ne yazıyor: *** HelloActionListener hlisten = new HelloActionListener (txtArea); *** ???? –

cevap

0

Üst düğmeye basıldığında metin alanınıza "Merhaba" ifadesini koymak istediğinizi varsayalım. Sonra olarak aşağıya HelloActionListener tanımlamak gerekir: kodunuzun

private static class HelloActionListener implements ActionListener { 

    private JTextArea textArea; 
    public HelloActionListener(JTextArea textArea) { 
     this.textArea = textArea; 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     textArea.setText("Hello"); 
    } 
} 

geri kalanı tür dağınık ama çalışması gerekir, ancak, iki kez görünür olmasını çerçeve yapmak gerekmez.

GÜNCELLEME

Ama kod aşağıdaki gibi bir şey olması gerektiğini düşünüyorum: Kodunuzdaki ilk frame.setVisible(true); gerek

public class MyApplication extends JFrame { 

    public MyApplication() { 
     setTitle("Listeners"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLayout(new BorderLayout()); 

     JTextArea txtArea = new JTextArea(); 
     HelloActionListener hlisten = new HelloActionListener(txtArea); 
     JButton bl = new JButton("TOP"); 
     bl.addActionListener(hlisten); 
     JButton b2 = new JButton("LEFT"); 
     ActionListener rightListener = e -> { 
      txtArea.setText("Yes,let's go Left"); 
     }; 
     b2.addActionListener(rightListener); 
     JButton b3 = new JButton("RIGHT"); 
     b3.addActionListener(e -> { 
      txtArea.setText("Sorry, we cant go Right"); 
     }); 

     JButton b4 = new JButton("Bottom"); 
     b4.addActionListener(hlisten); 

     add(bl, BorderLayout.PAGE_START); 
     add(b2, BorderLayout.LINE_START); 
     add(b3, BorderLayout.LINE_END); 
     add(b4, BorderLayout.PAGE_END); 
     add(txtArea, BorderLayout.CENTER); 
    } 

    public static void main(String[] args) { 

     SwingUtilities.invokeLater(() -> { 
      JFrame frame = new MyApplication(); 
      frame.pack(); 
      frame.setVisible(true); 
     }); 
    } 

    private class HelloActionListener implements ActionListener { 

     private JTextArea textArea; 
     public HelloActionListener(JTextArea textArea) { 
      this.textArea = textArea; 
     } 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      JButton button = (JButton) e.getSource(); 
      textArea.setText("Hello from " + button.getText()); 
     } 
    } 
} 
+0

Teşekkürler! Zaten o dersi aldım ama çalışmıyordum. Aşağıdakileri yerine getirdim: 'public void actionPerformed (ActionEvent e) { JButton x = (JButon) e.getSource(); area.setText ("Merhaba millet düğmesiyle:" + x.getText()); – feedoxx

+0

@feedoxx Güncellemeleri gör –

+0

Ayrıca basılan düğmeyi yazdırmanın herhangi bir yolu var mı? – feedoxx

0

var - doğru tekrar o aradığınız son. Ama panellerin hepsi sıfır büyüklüktedir. Görünene ayarlanmadan önce frame.pack(); numaralı telefonu aramanız gerekir. Ayrıca tüm bunların (GUI öğelerinin) ana iş parçanızdan değil, Olay Sevk İpliği'nden yapılması gerektiğini unutmayın.

+0

Evet, ilk frame.setVisible (true) öğesini kaldırmayı unutmuştum. Artık okulda öğreniyorum ve öğretmende örnekte HelloActionListener sınıfı yoktu! Yani... – feedoxx