2014-11-08 3 views
0

Я хочу создать рамку, в которой вы должны ввести свое имя и прочее. Я пытаюсь сделать это, имя: textfield, следующая строка, возраст: текстовое поле и т. Д. Но текстовое поле действительно высокое. Если я добавлю 2 текстовых поля на одну панель в фрейме, одно текстовое поле содержит половину экрана. Я пытаюсь исправить это с помощью менеджера компоновки, но я понятия не имею, как это сделать.java change size of Textfield

Не могли бы вы помочь мне?

Вот мой код:

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

class GUI{ 
    public static void main(String [] args){ 
     GUI g = new GUI(); 
     g.Start(); 
    } 

    public void Start(){ 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); 
     frame.setSize(640, 640);    
     JPanel panel = new JPanel(); 
     JPanel west = new JPanel();   
     JLabel name = new JLabel("Name: "); 
     JLabel age = new JLabel("Age: ");   
     JTextField field1 = new JTextField(); 
     JTextField field2 = new JTextField();   
     west.setLayout(new BoxLayout(west, BoxLayout.Y_AXIS)); 
     west.add(name); 
     west.add(age);  
     panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 
     panel.add(field1); 
     panel.add(field2);   
     frame.getContentPane().add(BorderLayout.CENTER, panel); 
     frame.getContentPane().add(BorderLayout.WEST, west); 
     frame.setVisible(true); 
    } 
} 

ответ

3

Сочетание BoxLayout и BorderLayout работают против вас, используйте что-то вроде GridBagLayout вместо этого.

Посмотрите How to Use GridBagLayout для получения более подробной информации

GridBagLayout

import java.awt.EventQueue; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class LayoutTest { 

    public static void main(String[] args) { 
     new LayoutTest(); 
    } 

    public LayoutTest() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JPanel form = new JPanel(new GridBagLayout()); 

       JLabel name = new JLabel("Name: "); 
     JLabel age = new JLabel("Age: "); 

     JTextField field1 = new JTextField(10); 
     JTextField field2 = new JTextField(3); 

       GridBagConstraints gbc = new GridBagConstraints(); 
       gbc.gridx = 0; 
       gbc.gridy = 0; 
       gbc.anchor = GridBagConstraints.WEST; 

       form.add(name, gbc); 
       gbc.gridy++; 
       form.add(age, gbc); 

       gbc.gridx++; 
       gbc.gridy = 0; 
       form.add(field1, gbc); 
       gbc.gridy++; 
       form.add(field2, gbc); 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(form); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

} 
+0

ой, ки спасибо –

-1

Не знаю, что IDE вы работаете, но я знаю, что с Eclipse, WindowBuilder Pro помогает много с такими вещами как это.

То, что вы ищете, задано в поле Bounds (x, y, width, height). Используйте это на своих объектах графического интерфейса.

x, y - координаты для начала объекта (0,0) относительно окна, в котором мы работаем. Происхождение также находится в верхнем левом углу окна, и чем дальше вы уходите от него в направлениях х/у число увеличивается. Немного отличается от типичного графика в школе.

Вот пример кода из одного из моих графических интерфейсов, чтобы действовать в качестве примера.

final TextField textField_1 = new TextField(); 
textField_1.setBounds(10, 231, 370, 22); 
panel.add(textField_1); 
+2

Избегайте использование 'null' макетов, пиксельные идеальные макеты иллюзия в современном дизайне пользовательского интерфейса. Слишком много факторов, которые влияют на индивидуальный размер компонентов, ни один из которых вы не можете контролировать. Swing был разработан для работы с менеджерами компоновки в ядре, отбрасывая их, не приведет к возникновению проблем и проблем, которые вы будете тратить все больше и больше времени на исправление. Взгляните на [Почему он недоволен использованием пустого макета в SWING?] (Http://stackoverflow.com/questions/6592468/why-is-it-frowned-upon-to-use-a-null- layout-in-swing) для получения более подробной информации – MadProgrammer

+0

Просто потому, что что-то может быть нахмурено, не означает, что об этом не стоит знать. И вы можете писать код, чтобы динамически обрабатывать позиционирование и размер без использования готовых макетов. Если бы Oracle не хотел, чтобы кто-то использовал его, он бы устарел. – Kristoff

+1

Так что вместо использования диспетчера макетов вы должны написать менеджер компоновки, имеет смысл. За 15 лет профессионального развития я никогда не находил ситуации, когда мне приходилось использовать нулевой менеджер макета, даже написав один или два менеджера макетов моего собственного ... – MadProgrammer