2012-11-28 8 views
5

저는 컴퓨터에서 실행하기 위해 가상 스마트 폰을 만들어야하는 학교 프로젝트에 참여하고 있습니다.자바에서 화면 키보드를 만드는 방법은 무엇입니까?

내 문제는 (스마트 폰과 같이) 화면에서 키보드를 만들어야한다는 것입니다. 키보드를 마우스로 클릭하여 사용할 수 있습니다. 모든 단일 파일을 만들 수는 있지만 실제로는 오랜 시간이 걸릴 것입니다. 그래서 나는 누군가가 모든 버튼을 만들고 그것을 화면에 정확하게 놓는 어떤 종류의 알고리즘을 알았다고 호핑했다.

이 간단한 예제 당신을 도울 수

+0

당신은 html과 javascript를 사용할 수 있습니까 – Ibu

+1

그것은 하나의 거대한 학교 프로젝트입니다. – gbtimmon

+0

루프를 사용하여 모든 단추를 간단히 만들 수 있습니다. – Vulcan

답변

9

당신은 for 루프를 사용하여 버튼을 만들 수 있습니다. 모든 키보드 행에 대해 하나의 루프가 그럴듯한 접근법입니다.

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 

더 OOP 접근 방식을 통해 더 우아 할 수 있지만,이 기본 루프 시스템이 작동합니다.

+1

'setSize' 호출과'setLocation' 호출에 정말 만족합니다. – Robin

+0

응답의 가장 중요한 부분입니다. 그것은 downvote을 필요로 말할 수 없습니다. – Vulcan

+2

분명히 Java/Swing에 익숙하지 않은 사람에게 주어진 기본 스윙 원칙을 위반하는 예는 하향 이미지를 받아야합니다. 해당 코드가 사라 졌으므로 내 downvote를 제거합니다 – Robin

7

:) 사전에 감사합니다

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 기능을 추가하지 않는 한'JFrame' 클래스를 확장하고 싶지는 않을지라도, 이것은 좋은 습관으로 간주됩니다. –

+1

+1 [ActionListener]보다 'Action'을 고려해보십시오 (예 : http://stackoverflow.com/a/5797965/230513). – trashgod

+2

+1 0이 좋을 수도 있습니다.) – 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); 

} 

이것은 수행 방법에 대한 빠른 예입니다. :).

+0

이것은 하나의 키 버튼 행만 생성합니다. 나는 그렇게 키보드를 배치 한 스마트 폰을 모른다. – Vulcan

+1

정확히 그 요점입니다. 이 샘플은 원칙을 보여 주지만 동시에 자신의 과제에 꽂을 수는 없습니다. 나는 누군가의 학교 임무를 수행하지 않고 자유를 위해 신용을 얻을 수 있도록 할 것입니다. – Nebri

관련 문제