2017-01-04 14 views
0

我想構建一個Swing組件的JTextField,這裏是我的代碼如何構建一個JTextField,以及如何使用方法全選()

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class JTextFieldGui{ 

    JTextField textField; 
    JLabel labelInput; 
    JLabel labelOutput; 

    public static void main(String[] args) { 
     JTextFieldGui gui = new JTextFieldGui(); 
     gui.go(); 
    } 

    public void go(){ 
     JFrame frame = new JFrame(); 
     JPanel panelInput = new JPanel(); 
     JPanel panelOutput = new JPanel(); 
     labelInput = new JLabel("Your first name: "); 
     labelOutput = new JLabel("Enter your name, and you will see it here."); 
     textField = new JTextField(20); 
     JButton enter = new JButton("Enter"); 
     JButton selectAll = new JButton("Select all text"); 

     frame.setSize(300,200); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     panelInput.setLayout(new BoxLayout(panelInput, BoxLayout.X_AXIS)); 

     textField.addActionListener(new LabelActionListener()); 
     enter.addActionListener(new LabelActionListener()); 
     selectAll.addActionListener(new TextFieldActionlistener()); 

     frame.getContentPane().add(BorderLayout.NORTH, panelInput); 
     panelInput.add(labelInput); 
     panelInput.add(textField); 
     panelInput.add(enter); 
     panelInput.add(selectAll); 
     frame.getContentPane().add(BorderLayout.CENTER, panelOutput); 
     panelOutput.add(labelOutput); 
    } 

    class LabelActionListener implements ActionListener{ 
     public void actionPerformed(ActionEvent event){ 
      labelOutput.setText(textField.getText()); 
     } 
    } 

    class TextFieldActionlistener implements ActionListener{ 
     public void actionPerformed(ActionEvent event){ 
      textField.selectAll(); 
     } 
    } 
} 

問題1:我定義文本字段的寬度在20列,但它始終佔用一排樣圖像:

https://i.stack.imgur.com/l6iQy.png

問題2:如何使用全選()方法,我用它的按鈕全選的聽衆,但是當我按一下按鈕,什麼也沒有發生,爲什麼

回答

1

我定義文本字段的寬度在20列,但它始終佔用一排,

這是一個BoxLayout的規則。調整組件大小以填充可用空間。 JTextField沒有最大大小,因此它增長。按鈕和標籤確實具有最大尺寸,因此不會增長。

請勿使用BoxLayout,只能使用FlowLayout。它會在每個組件之間自動留出空間,這是一個更好的佈局。

我用它的按鈕全選的聽衆,但是當我按一下按鈕,沒有任何反應,爲什麼

關注焦點依然在按鈕上。所選文字僅在文本字段具有焦點時顯示。

所以在他聽衆的代碼,你需要添加:

textField.requestFocusInWindow(); 

下面的代碼是老:

frame.getContentPane().add(BorderLayout.NORTH, panelInput); 
  1. 你不需要獲取內容窗格。您可以將該組件添加到框架。

  2. 約束應該是第二個參數

  3. 有新的約束,使名稱更加有意義

因此,代碼應該是:

frame.add(panelInput, BorderLayout.PAGE_START, panelInput); 

見節從Swing教程How to Use BorderLayout獲取更多信息。

+0

嗨,感謝您回答我的問題, 但我仍然沒有成功 將它添加到「TextFieldActionlistener」類中?之前「textField.selectAll();」 ?或者一些地方? –

+0

@Lixiaoyu,它的一行代碼。你爲什麼會問一個後續問題。在「selectAll()'語句之前和之後嘗試一下,看看會發生什麼。你通過嘗試學習! – camickr

+0

YESSSS,這真的很有幫助,我需要更多的嘗試,我現在得到它,並且謝謝你! –

相關問題