2012-11-28 17 views
5

Bilgisayarda çalıştırmak için sanal bir akıllı telefon oluşturmak zorunda olduğumuz bir okul projesi üzerinde çalışıyorum.Java'da ekran klavyesi nasıl oluştururum?

Sorun şu ki, ekranda bir klavyeyi (bir akıllı telefon gibi) oluşturmanız ve ardından farenizle tıklatarak kullanabilmem gerekiyor. Her bir JButton'u yaratabilirim, ama bu gerçekten uzun bir zaman alacaktır. Bu yüzden, birisinin tüm düğmeleri oluşturan ve onları doğru bir şekilde ekrana yerleştiren bir çeşit algoritma bildiğini umuyordum.

Bu basit örnek size yardımcı olabilir

+0

html ve javascript kullanabilirsiniz – Ibu

+1

Bu büyük bir okul projesidir. – gbtimmon

+0

Sadece bu düğmelerin tümünü oluşturmak için bir döngü kullanabilirsiniz. – Vulcan

cevap

9

Sen döngüler için kullanımı yoluyla düğmeleri inşa edecek. Her klavye sırası için bir döngü makul bir yaklaşımdır.

String row1 = "1234567890"; 
String row2 = "qwertyuiop"; 
// and so forth 
String[] rows = { row1, row2, .. }; 
for (int i = 0; i < rows.length; i++) { 
    char[] keys = rows[i].toCharArray(); 
    for (int j = 0; i < keys.length; j++) { 
     JButton button = new JButton(Character.toString(keys[j])); 
     // add button 
    } 
} 
// add special buttons like space bar 

Bu, daha fazla OOP yaklaşımıyla daha zarif bir şekilde yapılabilir, ancak bu temel döngü sistemi çalışacaktır.

+1

"setSize" çağrısı ve "setLocation" çağrısından gerçekten memnun olduğumu söyleyemem – Robin

+0

Yanıtın en önemli kısmı; bir downvote gerektirdiğini söyleyemem. – Vulcan

+2

Henüz Java/Swing'e henüz aşina olmayan birisine verilen temel Swing ilkelerini ihlal eden bir örnek, bir downvote imo hak ediyor. Şimdi bu kodun – Robin

7

:) şimdiden teşekkürler:

enter image description here

import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.awt.Font; 
import java.awt.GridLayout; 
import java.awt.Point; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import javax.swing.JButton; 
import javax.swing.JDialog; 
import javax.swing.JFrame; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 


@SuppressWarnings("serial") 
public class MainFrame extends JFrame 
{ 
    private JTextField txt; 
    private PopUpKeyboard keyboard; 

    public MainFrame() 
    { 
     super("pop-up keyboard"); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 

     txt = new JTextField(20); 
     keyboard = new PopUpKeyboard(txt); 

     txt.addMouseListener(new MouseAdapter() 
     { 
      @Override 
      public void mouseClicked(MouseEvent e) 
      { 
       Point p = txt.getLocationOnScreen(); 
       p.y += 30; 
       keyboard.setLocation(p); 
       keyboard.setVisible(true); 
      } 
     }); 
     setLayout(new FlowLayout()); 
     add(txt); 

     pack(); 
     setLocationByPlatform(true); 
    } 

    public static void main(String[] args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       new MainFrame().setVisible(true); 
      } 
     }); 
    } 

    private class PopUpKeyboard extends JDialog implements ActionListener 
    { 
     private JTextField txt; 

     public PopUpKeyboard(JTextField txt) 
     { 
      this.txt = txt; 
      setLayout(new GridLayout(3, 3)); 
      for(int i = 1; i <= 9; i++) createButton(Integer.toString(i)); 
      pack(); 
     } 

     private void createButton(String label) 
     { 
      JButton btn = new JButton(label); 
      btn.addActionListener(this); 
      btn.setFocusPainted(false); 
      btn.setPreferredSize(new Dimension(100, 100)); 
      Font font = btn.getFont(); 
      float size = font.getSize() + 15.0f; 
      btn.setFont(font.deriveFont(size)); 
      add(btn); 
     } 

     @Override 
     public void actionPerformed(ActionEvent e) 
     { 
      String actionCommand = e.getActionCommand(); 
      txt.setText(txt.getText() + actionCommand); 
     } 
    } 
} 
+0

+1 çok güzel olsa da, işlevselliği eklemiyorsa, JFrame'in sınıfını genişletmek istemeyebilirsiniz, çünkü bu kötü bir uygulama olarak kabul edilir. –

+1

+1 Ayrıca, [Örnek] için http://stackoverflow.com/a/5797965/230513) 'ActionListener' tercihinde 'Action' seçeneğini de düşünün. – trashgod

+2

+1 Sıfırlamak güzel olabilir;) – MadProgrammer

3
/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    String alphabet = "abcdefghijklmnopqrstuvwxyz"; 

    JFrame myFrame = new JFrame(); 
    JPanel myPanel = new JPanel(); 

    for (int i = 0; i < alphabet.length(); i++) { 

     myPanel.add(new JButton(alphabet.substring(i, i + 1))); 
    } 

    myFrame.add(myPanel); 
    myFrame.pack(); 
    myFrame.setVisible(true); 

} 

Bu, nasıl yapılacağının hızlı bir örneğidir :).

+0

gitmiş olduğuna inanıyorum. Bu sadece bir tuş tuşu satırı oluşturacaktır. Klavyeleriyle böyle bir akıllı telefon bilmiyorum. – Vulcan

+1

tam olarak bu nokta. Bu örnek ilkeyi göstermektedir, ancak aynı zamanda sadece görevine eklenemez. Birinin okul ödevini yapmayacağım ve krediyi ücretsiz almasına izin vermeyeceğim. – Nebri

İlgili konular