2013-08-04 1 views
2

Как я могу выровнять компоненты в строке со столом без ущерба для разрыва между компонентами 5px? У меня была идея, чтобы установить значение для hgap от FlowLayout к нулю, но если я это изменит зазор между компонентами и ... Вот скриншот и код, если я не был ясен:Как отрегулировать положение компонентов в строке

Как Я хочу: HOW I WANT

Как это: HOW IT IS

Код:

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.FlowLayout; 
import java.awt.GridLayout; 
import java.awt.event.KeyEvent; 
import javax.swing.BorderFactory; 
import javax.swing.Box; 
import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.JTextField; 

public class Test3 { 

    private JButton addNewColumnButton; 
    private JButton calculateColumnButton; 
    private JButton resultButton; 
    private JLabel textLabel; 
    private JTextField columnField; 
    private JTextField resultField; 
    private JComboBox columnListCB; 
    private JTable table; 
    private String[] tableCols = { 
     "First Column", "Second Column", "Third Column", "", "", "", "" 
    }; 
    private Object[][] tableRows = { 
     {true, null, null, null, null, null, null, null}, 
     {true, null, null, null, null, null, null, null}, 
     {true, null, null, null, null, null, null, null}, 
     {true, null, null, null, null, null, null, null}, 
     {true, null, null, null, null, null, null, null}, 
     {true, null, null, null, null, null, null, null}, 
     {true, null, null, null, null, null, null, null}, 
     {true, null, null, null, null, null, null, null} 
    }; 

    public Test3() { 
     JFrame f = new JFrame("Test2"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(getPanelComponents()); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    private JPanel getPanelComponents() { 
     JPanel panel = new JPanel(new BorderLayout()); 
     panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); 

     JPanel center = new JPanel(new GridLayout()); 
     table = new JTable(tableRows, tableCols); 
     table.setPreferredScrollableViewportSize(new Dimension(450, 128)); 
     table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
     center.add(new JScrollPane(table)); 

     JPanel eastPanel = new JPanel(); 
     Box eastPanelBox = Box.createVerticalBox(); 
     addNewColumnButton = new JButton("Add New Column"); 
     addNewColumnButton.setAlignmentX(Box.CENTER_ALIGNMENT); 
     eastPanelBox.add(addNewColumnButton); 
     eastPanelBox.add(Box.createVerticalStrut(35)); 
     columnField = new JTextField(); 
     columnField.setAlignmentX(Box.CENTER_ALIGNMENT); 
     eastPanelBox.add(columnField); 
     eastPanelBox.add(Box.createVerticalStrut(5)); 
     columnListCB = new JComboBox(tableCols); 
     columnListCB.setAlignmentX(Box.CENTER_ALIGNMENT); 
     eastPanelBox.add(columnListCB); 
     eastPanelBox.add(Box.createVerticalStrut(5)); 
     calculateColumnButton = new JButton("Calculate Column"); 
     calculateColumnButton.setAlignmentX(Box.CENTER_ALIGNMENT); 
     eastPanelBox.add(calculateColumnButton); 
     eastPanel.add(eastPanelBox); 

     JPanel southPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 5)); 

     resultButton = new JButton("Calculate"); 
     southPanel.add(resultButton); 
     textLabel = new JLabel("Result:"); 
     southPanel.add(textLabel); 
     resultField = new JTextField(10); 
     southPanel.add(resultField); 

     panel.add(center, BorderLayout.WEST); 
     panel.add(southPanel, BorderLayout.SOUTH); 
     panel.add(eastPanel, BorderLayout.EAST); 
     return panel; 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new Test3(); 
      } 
     }); 
    } 
} 
+1

см 'JPanel southPanel = новые JPanel (новая FlowLayout (FlowLayout.LEFT, 0, 0));' это ('5pixels является default' щелевые) устанавливает по' новым FlowLayout (FlowLayout .LEFT, 5, 5)); 'FlowLayout не может быть подходящим для этой работы, вы можете помочь вам с помощью Borders' xxx.setBorder (новый LineBorder (Color.BLACK, 1)); ' – mKorbel

+0

См. Также [Laying Out Компоненты в контейнере] (http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html) –

+0

Итак, следует ли затем создать две панели для этих свойств? Например, 'code JPanel panel = new JPanel(); panel.setBorder (новый LineBorder (null, 0)); ', а затем внутренний JPanel, который содержит FlowLayout и его компоненты с разрывом 5px? постскриптум Мне действительно не нравится, если вы установили нулевой параметр цвета, они все равно начнут по умолчанию цвет:/ –

ответ

1

в комментариях @mKorbel, диафрагменное По умолчанию вертикальное пространство пикселя добавляется по умолчанию: JPanel, FlowLayout. На рисунке ниже показано, что vgap установлено на ноль.

JPanel eastPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 5, 0)); 

enter image description here

+0

Спасибо, что работает. Теперь я понимаю. Но как я буду исправлять южную панель? Должен ли я делать то же самое, что и для восточной панели, я имею в виду вместо Flowlayout, Box southPanelBox = Box.createHorizontalBox() ;? я бы очень хотел оставить FlowLayout, если это возможно :) –

+0

А, я пропустил это в ваших изображениях; похоже, что вы можете изменить «hgap» на ноль в «SOUTH». – trashgod

+0

Да, человек, который работает, но, как я уже говорил, он будет тянуть и компоненты обратно, что не является моим результатом, мне нужно сохранить пространство в 5 пикселей. У вас есть идеи, или вы считаете, что лучше всего использовать один и тот же макет «Box», как с eastPanel? –

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

  • Нет связанных вопросов^_^