2015-10-25 22 views
0

我是事件監聽器的新手。我發現這個練習。我的目標是用用戶輸入更改BorderLayout。我嘗試使用DocumentListenerActionListener,但我無法使它工作。以下是我可以代碼:帶用戶輸入/事件監聽器的動態BorderLayout

public class Eventlistenertest extends JFrame { 

    public Eventlistenertest(){ 
     JPanel p1 = new JPanel(new BorderLayout(i, j)); // here is i and j. 

     p1.add(new JButton("East"), BorderLayout.EAST); 
     p1.add(new JButton("South"), BorderLayout.SOUTH); 
     p1.add(new JButton("West"), BorderLayout.WEST); 
     p1.add(new JButton("North"), BorderLayout.NORTH); 
     p1.add(new JButton("Center"), BorderLayout.CENTER); 
     p1.setBorder(new TitledBorder("Container of BorderLayout")); 

     JTextField VGap = new JTextField(35); 
     JTextField HGap = new JTextField(35); 

     JPanel p2 = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 20)); 
     p2.add(new JLabel("HGap")); 
     p2.add(HGap); 
     p2.add(new JLabel("VGap")); 
     p2.add(VGap); 
     p2.setBorder(new TitledBorder("BorderLayout Properties")); 

     setLayout(new GridLayout(2, 1, 5, 5)); 
     add(p1); 
     add(p2); 

     int i =Integer.parseInt(HGap.getText()); 
     int j =Integer.parseInt(VGap.getText()); 
    } 

    /** Main method */ 
    public static void main(String[] args) { 
     Eventlistenertest frame = new Eventlistenertest(); 
     frame.setTitle("ShowBorderLayout"); 
     frame.setSize(500, 500); 
     frame.setLocationRelativeTo(null); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 
} 

我需要在開始ij零,JTextField輸入後進行更改。我怎樣才能做到這一點?

+0

「我發現這個練習」哪些運動? 「我無法做到這一點」你想要做什麼? –

+0

您需要在輸入後重新排列整個Frame並重新佈局......享受揮杆的味道 – Vogel612

+0

我正在嘗試更改BorderLayout(i,j),而我和j將會是用戶輸入。 –

回答

2

開始採取看看How to Use Text FieldsHow to Write an Action Listeners

從本質上講,一個方法是將ActionListener添加到您的領域,當用戶按下輸入,同比佈局

ActionListener listener = new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      int vgap = 0; 
      int hgap = 0; 
      if (VGap.getText().trim().length() > 0) { 
       try { 
        vgap = Integer.parseInt(VGap.getText()); 
       } catch (NumberFormatException exp) { 
        System.out.println("Invalid number for vgap"); 
       } 
      } 
      if (HGap.getText().trim().length() > 0) { 
       try { 
        hgap = Integer.parseInt(HGap.getText()); 
       } catch (NumberFormatException exp) { 
        System.out.println("Invalid number for vgap"); 
       } 
      } 
      borderLayout.setHgap(hgap); 
      borderLayout.setVgap(vgap); 
      p1.revalidate(); 
     } 

    }; 

    VGap.addActionListener(listener); 
    HGap.addActionListener(listener); 

有一個要求,您首先應用於p1BorderLayout實例必須與您更新的實例相同。

你可以使用一個DocumentListener,但過程變得更加複雜

+0

我會試試看,謝謝。 –