2013-12-26 2 views
6

Я создал макет для основного текстового редактора, я бы хотел, чтобы верхняя панель имела кнопки, выровненные слева, верхняя панель JPanel, и она использует диспетчер FlowLayout. Он находится внутри сетки, используя диспетчер макетов GridBag. Какие-либо предложения?Как выровнять компоненты в JPanel слева?

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

public class GridTest { 
private static JButton firstButton, secondButton, thirdButton; 
private static JPanel panel, sidebar, infoPanel; 
private static JTextArea textArea; 

public static void addComponentsToPane(Container container) { 
    container.setLayout(new GridBagLayout()); 
    GridBagConstraints c = new GridBagConstraints(); 

    firstButton = new JButton("Button 1"); 
    secondButton = new JButton("Button 2"); 
    thirdButton = new JButton("Button 3"); 

    panel = new JPanel(new FlowLayout()); 
    sidebar = new JPanel(new FlowLayout()); 
    infoPanel = new JPanel(new FlowLayout()); 

    textArea = new JTextArea("This is some generic text!"); 

    c.fill = GridBagConstraints.HORIZONTAL; 
    c.ipady = 0; 
    c.weighty = 0; 
    c.weightx = 1; 
    c.gridx = 0; 
    c.gridwidth = 3; 
    c.gridy = 0; 
    c.anchor = GridBagConstraints.LINE_START; 
    container.add(panel, c); 

    panel.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); 
    panel.setBorder(BorderFactory.createLineBorder(Color.black)); 
    panel.add(firstButton); 
    panel.add(secondButton); 
    panel.add(thirdButton); 

    c.fill = GridBagConstraints.BOTH; 
    c.ipady = 300; 
    c.ipadx = 100; 
    c.weighty = 1; 
    c.weightx = 0; 
    c.gridx = 0; 
    c.gridheight = 2; 
    c.gridwidth = 1; 
    c.gridy = 1; 
    container.add(sidebar, c); 

    sidebar.setBorder(BorderFactory.createLineBorder(Color.black)); 

    c.fill = GridBagConstraints.BOTH; 
    c.ipady = 40;  
    c.weightx = 1; 
    c.weighty = 1; 
    c.gridwidth = 2; 
    c.gridheight = 1; 
    c.gridx = 1; 
    c.gridy = 1; 
    container.add(textArea, c); 

    textArea.setFont(new Font("Serif", Font.ITALIC, 16)); 
    textArea.setLineWrap(true); 
    textArea.setWrapStyleWord(true); 

    c.fill = GridBagConstraints.HORIZONTAL; 
    c.ipady = 20; 
    c.weighty = 0; 
    c.weightx = 0; 
    c.anchor = GridBagConstraints.PAGE_END; 
    c.gridx = 1; 
    c.gridwidth = 2; 
    c.gridy = 2; 
    container.add(infoPanel, c); 

    infoPanel.setBorder(BorderFactory.createLineBorder(Color.black)); 
} 


private static void createAndShowGUI() { 
    JFrame frame = new JFrame("Grid test"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    addComponentsToPane(frame.getContentPane()); 
    frame.setSize(800,600); 
    frame.setVisible(true); 
} 

public static void main(String[] args) { 
    javax.swing.SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGUI(); 
     } 
    }); 
} 
} 
+2

+1 для [SSCCE] (http://sscce.org) – nachokk

ответ

12

Рассмотрите возможность использования JToolBar вместо JPanel, так как он имеет собственный менеджер компоновки, который , в основном, делает это в любом случае.

Tool BarTool bar

Изображение из следующего урока ...

ЗАКАНЧИВАТЬ How to use Tool Bars для более подробной информации

11

Один из способов: Измените FlowLayout на тот, который предпочитает размещать свои компоненты слева:

panel = new JPanel(new FlowLayout(FlowLayout.LEADING)); 
+4

Хорошего выбора; также хорошо работает с 'JToolBar'. – trashgod

Смежные вопросы