Поместите кнопку рядом - PullRequest
       13

Поместите кнопку рядом

0 голосов
/ 08 октября 2009

как сделать кнопку рядом. Я использовал gridBagLayout для разработки макета. Проблема в том, что кнопки расположены слишком далеко друг от друга. Я попытался выбрать ЦЕНТР в качестве якоря, но это делает кнопку перекрывающейся. Если я использовал WEST и EAST, кнопка находилась слишком далеко друг от друга.

например. СОХРАНИТЬ ---------- НОВЫЙ ШАБЛОН вместо СОХРАНИТЬ НОВЫЙ_ПАТЕРН.

JButton bSave = new JButton("SAVE");
JButton bPattern = new JButton("NEW_PATTERN");
con = new GridBagConstraints();
con.anchor=GridBagConstraints.WEST;
con.gridy = 3; con.gridx = 0;           
con.gridwidth = 1; con.gridheight = 1;      
con.insets= new Insets(2,5,2,2);        
m.setConstraints(bSave, con);
c.add(bSave);
con.weightx=1;
con.gridy=3; con.gridx=0;
con.anchor=GridBagConstraints.EAST;
m.setConstraints(bPattern,con);
c.add(bPattern);

Ответы [ 6 ]

1 голос
/ 08 октября 2009

Спасибо, Акф, я решил проблему, поместив flowLayout внутри gridBagLayout.

....
JButton bSave = new JButton("Save");
JButton bPattern = new JButton("New Pattern");
JPanel pContainer = new JPanel();
pContainer.setLayout(new FlowLayout(FlowLayout.CENTER));
pContainer.add(bSave); pContainer.add(bPattern); 
con = new GridBagConstraints();
con.anchor=GridBagConstraints.CENTER;
con.gridy = 3; con.gridx = 0;           
con.gridwidth = 1; con.gridheight = 1;      
m.setConstraints(pContainer, con);
c.add(pContainer);
....
1 голос
/ 08 октября 2009

GridBagLayout - самый сложный из макетов. Если вы просто выравниваете пару кнопок, я бы рекомендовал использовать FlowLayout (по умолчанию) или BoxLayout. Но, если вы хотите использовать GridBagLayout, вместо настройки привязки, установите gridx равным 1 для второй кнопки. Кроме того, не уверен, почему у вас сетка 3 вместо сетки 0 (если только вы не определили другой код, который использует сетку 0-2).

0 голосов
/ 08 октября 2009

Этот код размещает кнопки рядом в центре экрана.

Ключ:

constraints.fill = GridBagConstraints.NONE; -> заставить кнопки не расширяться

constraints.insets.right = 0; -> заставляет кнопки стоять рядом

constraints.insets.left = 0; -> заставляет кнопки стоять рядом

constraints.weightx = 1 -> делает ячейку, в которой кнопки растянуты по горизонтали

constraints.anchor = GridBagConstraints.EAST; -> переводит левую кнопку в ячейку

constraints.anchor = GridBagConstraints.WEST; -> заставляет правую кнопку стоять слева от ячейки

public static void main(String args[]){
        JFrame frame=new JFrame();
        Container cont=frame.getContentPane();
        cont.setLayout(new GridBagLayout());

        GridBagConstraints constraints=new GridBagConstraints();
        constraints.insets.top=2;
        constraints.insets.bottom=2;
        constraints.insets.left=0;// increment to separate buttons
        constraints.insets.right=0;// increment to separate buttons
        constraints.fill=GridBagConstraints.NONE;
        constraints.weightx=1;
        constraints.gridy=0;

        constraints.anchor=GridBagConstraints.EAST;
        constraints.gridx=0;
        cont.add(new JButton("Save"),constraints);

        constraints.anchor=GridBagConstraints.WEST;
        constraints.gridx=1;
        cont.add(new JButton("New Pattern"),constraints);

        frame.pack();
        frame.setVisible(true);
    }
0 голосов
/ 08 октября 2009

Я предлагаю вам прочитать учебник для GridBagLayout, поскольку он является «из коробки» самым продвинутым менеджером компоновки и делает другие устаревшими. По этим причинам стоит учиться. Это делает все простым, если вы думаете об этом как о сетке, и все, что вам нужно, - это координаты x и y, которые вы пропустили в своем коде. Вы были почти там:)

Смешивать менеджеры компоновки, как правило, очень плохая идея, поскольку все они работают немного по-разному, когда дело доходит до заполнения контейнеров дополнительным пространством.

@ camickr На основании моего комментария люди должны использовать GridBagLayout, поскольку он является наиболее гибким и может использоваться в любой ситуации. Наличие только одного должно привести к простой и ремонтопригодной. Я также нахожу это очень легким для чтения, так как он логически сопоставлен. Ограничения изменяются только в том случае, если вы используете один объект ограничений для всех компонентов, что, очевидно, является плохой идеей.

0 голосов
/ 08 октября 2009

Вместо GridBagLayout, GridLayout - простое решение. Это легко настроить:

JButton bSave = new JButton("SAVE");
JButton bPattern = new JButton("NEW_PATTERN");
JPanel panel = new JPanel(new GridLayout(1,2); // 1 row, 2 cols
panel.add(bSave);
panel.add(bPattern);

EDIT:

Просто из любопытства я дурачился с вашим оригиналом и нашел комбинацию, которая позволяет использовать только GridBagLayout. Он не сильно отличается от вашего оригинала:

GridBagConstraints con = new GridBagConstraints();
con.anchor=GridBagConstraints.WEST;
con.gridy = 3;
con.gridx = 0;                   
con.gridwidth = 1; 
con.gridheight = 1;          
con.insets= new Insets(2,5,2,2);        
m.setConstraints(bSave, con);
c.add(bSave);
con.weightx=0;
con.gridy=3;
con.gridx=1;//this is the big diff!
con.anchor=GridBagConstraints.EAST;
m.setConstraints(bPattern,con);
c.add(bPattern);
0 голосов
/ 08 октября 2009

Почему бы вам сначала не прочитать свои старые сообщения перед тем, как писать новые вопросы?

Вы получили ссылку на учебник по Swing в своем последнем сообщении. Так что прочитайте учебник, попробуйте примеры и используйте соответствующий менеджер раскладки или комбинацию менеджеров раскладки для работы.

...