2014-11-27 3 views
0

Я пытаюсь установить три кнопки в середине этого JPanel, который установлен над другой панелью.Позиционирование кнопки на JPanel

Все работает нормально, но три кнопки остаются в одном и том же положении, несмотря ни на что.

Как перенести три кнопки в центр panel2? Прямо сейчас три кнопки находятся в центре слева от panel2.

Код для моей панели здесь:

public AbcGeniusPanel() 
{ 
    //this.setVisible(false); 
    ImageIcon[] alphabets = new ImageIcon[26]; 
    ImageIcon[] images = new ImageIcon[26]; 
    setBackground(Color.yellow); 

    //Load the images for alphabet images into the alphabets array using a for loop 
    for(int i = 0; i < alphabets.length; i++) 
    { 
    alphabets[i] = new ImageIcon("C:\\Users\\Dip\\Desktop\\Java Projects\\AbcGeniusApp\\src\\Alphabets\\"+(i+1)+".png"); 
    } 

    //Load the images images in the IMageIcon array 
    for(int i = 0; i < images.length; i++) 
    { 
    images[i] = new ImageIcon("C:\\Users\\Dip\\Desktop\\Java Projects\\AbcGeniusApp\\src\\Images\\"+(i+1)+".png"); 
    } 

    //Create two JPanel objects 
    JPanel panel = new JPanel(); 
    JPanel panel2 = new JPanel(); 
    //Set a layoutManager on the panel 

    panel.setLayout(new GridLayout(2, 13, 5, 5)); //This is good for now 

    //Create an array for holdoing the buttons 
    buttons = new JButton[26]; 

    /
    //Try passing Images inside the JButton parameter later. 
    for(int i = 0; i < 26; i++) 
    { 
    buttons[i] = new JButton(alphabets[i]); 
    } 

    setLayout(new BorderLayout(2,0)); 
    panel2.setLayout(new BoxLayout(panel2, BoxLayout.X_AXIS)); 
    //add the panel to the Border layout 
    add(panel,BorderLayout.SOUTH); 
    add(panel2); 

    //Add evenHandling mechanism to all the buttons 
    for(int k = 0; k<26; k++) 
    { 
     buttons[k].addActionListener(this); 
    } 
    for(int count1 = 0; count1<26; count1++) 
    { 
    panel.add(buttons[count1]); 
    } 

    JButton button1 = new JButton(); 
    JButton button2 = new JButton(); 
    JButton button3 = new JButton(); 

    panel2.add(button1); 
    panel2.add(button2); 
    panel2.add(button3); 
    } 
+0

1) Одна пустая строка белого пространства в исходном коде все, что требуется * когда-либо *. Пустые строки после '{' или before '}' также типично избыточны. 2) Чтобы получить более эффективную помощь, отправьте сообщение [MCVE] (http://stackoverflow.com/help/mcve) (минимальный полный проверяемый пример) или [SSCCE] (http://www.sscce.org/) (Short, Самостоятельный, правильный пример). –

+0

Я озадачен тем, что означает «Центр слева». Это центр или он оставлен? Во всяком случае, использование простой FlowLayout с соответствующим выравниванием должно дать вам ожидаемый макет –

+0

Вот ссылка для выхода http://tinypic.com/r/1z4ki2b/8, кнопки на левой стороне, которые нельзя переместить , Но в любом случае спасибо, я попробую Flowlayout с различными выравниваниями. – loftywaif002

ответ

0

Вы можете использовать BoxLayout (это может быть проще, просто используя Box.createHorizontalBox()), но вы должны положить вертикальный клей на каждом конце коробки. Вы также можете поставить горизонтальные распорки между кнопками, чтобы дать им некоторый интервал.

Будет проще использовать FlowLayout для ваших кнопок, что эквивалентно тому, что я сказал, без дополнительного кода. Может быть потенциальный недостаток макета, заставляющий кнопку или 2 перейти на следующую строку, но с вашим простым приложением это, вероятно, не так много шансов.

Вот два примера. Закомментируйте одну строку и комментарий в (???) другую строку, чтобы увидеть другой подход к кнопкам:

import java.awt.BorderLayout; 
import java.awt.Container; 
import java.awt.GridLayout; 
import javax.swing.Box; 
import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 


public class AlphabetExample { 

    public static void main(String[] args) { 
     AlphabetExample alphabetExample = new AlphabetExample(); 
     JFrame frame = alphabetExample.createGui(); 
     frame.setVisible(true); 
    } 

    private JFrame createGui() { 
     JFrame frame = new JFrame("Letters!"); 
     frame.setSize(400, 300); 

     Container contentPane = frame.getContentPane(); 
     contentPane.add(setupLetters(), BorderLayout.CENTER); 
//  contentPane.add(setupButtonsWithBox(), BorderLayout.NORTH); // <-- with a BoxLayout 
     contentPane.add(setupButtonsWithFlowPane(), BorderLayout.NORTH); // <-- with a FlowLayout 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     return frame; 
    } 

    private JPanel setupLetters() { 
     String letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

     JPanel lettersPanel = new JPanel(new GridLayout(2, 13, 5, 5)); 

     for (char x : letters.toCharArray()) { 
     final String letter = String.valueOf(x); 
     JButton button = new JButton(letter); 
     button.setActionCommand(letter); 
     lettersPanel.add(button); 
     } 

     return lettersPanel; 
    } 

    private JComponent setupButtonsWithBox() { 
     Box b = Box.createHorizontalBox(); 
     b.add(Box.createHorizontalGlue()); 
     b.add(new JButton("Left Button")); 
     b.add(Box.createHorizontalStrut(5)); 
     b.add(new JButton("Center Button")); 
     b.add(Box.createHorizontalStrut(5)); 
     b.add(new JButton("Right Button")); 
     b.add(Box.createHorizontalGlue()); 
     return b; 
    } 

    private JComponent setupButtonsWithFlowPane() { 
     JPanel panel = new JPanel(); // default layout manager is FlowLayout 
     panel.add(new JButton("Left Button")); 
     panel.add(new JButton("Center Button")); 
     panel.add(new JButton("Right Button")); 

     return panel; 
    } 
} 
0

Это решило мою проблему

 for(int count1 = 0; count1<3; count1++) 
    { 
    panel2.add(Box.createHorizontalGlue()); 
    panel2.add(imageButtons[count1]); 
    panel2.add(Box.createHorizontalGlue()); 
    }