2014-04-26 4 views

답변

2

당신은 사용자 정의 버튼을 만들 수 있습니다.

한 가지 방법은 버튼에 CardLayout을 사용하고 JTextFieldJLabel을 추가하는 것입니다. 버튼의 ActionListener에서 버튼을 누르면 텍스트 필드가 표시되고 버튼은 비활성화됩니다. 입력란에 텍스트를 입력하고 을 누르면을 입력하고 표시가있는 라벨을 선택하고 버튼을 사용할 수 있습니다.

enter image description hereenter image description here 나는 전체 윈도우 내용을 대체하지 않으 enter image description here

import java.awt.CardLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 
import javax.swing.SwingConstants; 
import javax.swing.SwingUtilities; 

public class TestButtonTextField { 
    public TestButtonTextField() { 
     JFrame frame = new JFrame(); 
     frame.add(new TextFieldButton("Hello")); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    protected class TextFieldButton extends JButton { 

     private static final String FIELD = "field"; 
     private static final String LABEL = "label"; 

     private final CardLayout layout = new CardLayout(); 
     private final JLabel label; 

     public TextFieldButton(String text) { 
      super(); 
      setLayout(layout); 

      label = new JLabel(text); 
      label.setHorizontalAlignment(SwingConstants.CENTER); 
      this.add(label, LABEL); 

      final JTextField field = createField(); 
      this.add(field, FIELD); 

      this.addActionListener(new ActionListener(){ 
       public void actionPerformed(ActionEvent e) { 
        layout.show(TextFieldButton.this, FIELD); 
        TextFieldButton.this.setEnabled(false); 
       } 
      }); 

     } 

     private JTextField createField() { 
      final JTextField field = new JTextField(5); 
      field.addActionListener(new ActionListener(){ 
       public void actionPerformed(ActionEvent e) { 
        label.setText(field.getText()); 
        field.setText(""); 
        layout.show(TextFieldButton.this, LABEL); 
        TextFieldButton.this.setEnabled(true); 
       } 
      }); 
      return field; 
     } 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run() { 
       new TestButtonTextField(); 
      } 
     }); 
    } 
} 
0

버튼에 적절한 수신기를 추가하려면 addActionListener를 사용하십시오. setVisible (boolean) 메서드를 사용하여 구성 요소의 가시성을 전환 할 수 있습니다. 그러나이 작업 후에는 윈도우의 크기를 조정하거나 다시 칠해야 할 것입니다.

편집 : 당신이 전체 윈도우 내용을 교체하려는 경우, 당신은 또한 스윙의 CardLayout에서 살펴 봐야 할 수 있습니다 : http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html

+0

. 클릭 할 때 일부 문자열로 버튼을 채우기 만하면됩니다. 그것은 _setVisible (true) _.에도 불구하고 작동하지 않았다. – bltzrrr

+0

JTextField를 표시하거나 단추를 채우시겠습니까? 버튼 클릭이나 텍스트 필드의 클릭에 반응하고 싶습니까? 네가하고 싶은 것을 이해하는지 확신 할 수 없다. – user3575404

+0

JTextField를 JButton 위에 표시하려면 JButton을 클릭합니다. String을 입력하면 그 내용을 저장할 수 있습니다 (나중에 사용법을 다룰 것입니다. 나는 이걸 건네 준다.) – bltzrrr

관련 문제