2010-04-22 3 views
1

Я собираю базовый макет для книги контактов, и я хочу знать, как я могу сделать три тестовых кнопки от края до края, как это делают кнопки со стрелками.JButton Layout Issue

private static class ButtonHandler implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
    System.out.println("Code Placeholder"); 
    } 
} 

public static void main(String[] args) { 

    //down button 
    ImageIcon downArrow = new ImageIcon("down.png"); 
    JButton downButton = new JButton(downArrow); 
    ButtonHandler downListener = new ButtonHandler(); 
    downButton.addActionListener(downListener); 

    //up button 
    ImageIcon upArrow = new ImageIcon("up.png"); 
    JButton upButton = new JButton(upArrow); 
    ButtonHandler upListener = new ButtonHandler(); 
    upButton.addActionListener(upListener); 

    //contacts 
    JButton test1Button = new JButton("Code Placeholder"); 
    JButton test2Button = new JButton("Code Placeholder"); 
    JButton test3Button = new JButton("Code Placeholder"); 

    Box box = Box.createVerticalBox(); 
    box.add(test1Button); 
    box.add(test2Button); 
    box.add(test3Button); 

    JPanel content = new JPanel(); 
    content.setLayout(new BorderLayout()); 
    content.add(box, BorderLayout.CENTER); 
    content.add(downButton, BorderLayout.SOUTH); 
    content.add(upButton, BorderLayout.NORTH); 

    JFrame window = new JFrame("Contacts"); 
    window.setContentPane(content); 
    window.setSize(400, 600); 
    window.setLocation(100, 100); 
    window.setVisible(true); 

} 
+1

Рассматривали ли вы с помощью GridLayout (http://java.sun.com/docs/books/tutorial/uiswing/layout/grid.html)? – kloffy

+0

Да, я попытался, и когда я его установил, он выбрасывает AWTError, так как я думаю, что Box по умолчанию - BoxLayout. setLayout (LayoutManager l) Выдает AWTError, так как Box может использовать только BoxLayout. От http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/Box.html –

+2

Я думаю, что то, что @kloffy предлагает, состоит в том, что вы конвертируете 'Box' в' JPanel' который использует «GridLayout» для менеджера компоновки. – Ash

ответ

1

Вслед за @ kloffy-х внушения:

package playground.tests; 

import java.awt.GridLayout; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

import junit.framework.TestCase; 

public class ButtonTest extends TestCase { 

    public void testThreeButtons() throws Exception { 
      JPanel panel = new JPanel(); 
      panel.setLayout(new GridLayout()); 
      JButton button1 = new JButton("A"); 
      JButton button2 = new JButton("B"); 
      JButton button3 = new JButton("C"); 
      panel.add(button1); 
      panel.add(button2); 
      panel.add(button3); 

      JFrame window = new JFrame("Contacts"); 
      window.setContentPane(panel); 
      window.setSize(300, 600); 
      window.pack(); 
      window.setVisible(true); 
      int width = button1.getWidth(); 
      assertEquals(width, button2.getWidth()); 
      assertEquals(width, button3.getWidth()); 
    } 
}