2013-12-10 2 views
3

Я снова изменил код. Но теперь, когда я запускаю код, текстовое поле очень мало. Только если я выберу одно из левого, центрального или правого выравнивания, изменится размер текстового поля. Где я совершил ошибку.Невозможно изменить размер текстового поля во время выполнения

Я написал ниже программу. Когда я нажимаю на левую, правую или центральную кнопку, программа также должна считывать значение в текстовом поле размера столбца, а затем автоматически изменять размер текстового поля сообщения. BUt Я не могу это сделать. Любое понимание будет оценено по достоинству. пакет работы с текстовыми полями;

package workingwithjtextfields; 

import java.awt.*; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import javax.swing.*; 
import javax.swing.border.*; 

public class WorkingwithJTextFields extends JFrame 
{ 
    // private int size = 100; 
    private JTextField jtfMessage = new JTextField(100); 

    private JTextField jtfColumn = new JTextField(5); 
    private JRadioButton jrbLeft,jrbCenter,jrbRight; 

    public static void main(String[] args) //Main program begins here. 
    { 
     JFrame frame = new WorkingwithJTextFields();//Instantiating an object. 
     frame.setTitle("Exercise 17.11");//Setting the frame title. 
     frame.setSize(470,110);//Setting the size. 
     frame.setLocationRelativeTo(null);//Setting the location. 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// Default closing options. 
     frame.setVisible(true);//Setting visibility to true. 
    }//End of main program 

    public WorkingwithJTextFields() 
    { 

    // jtfMessage.setColumns(100); 
    final JPanel parent = new JPanel(); 
    parent.setLayout(new GridLayout(2,1,3,3)); 

    final JPanel p1 = new JPanel(); 
    p1.setLayout(new FlowLayout(FlowLayout.LEFT,30,0)); 

    p1.add(new JLabel("TextField",SwingConstants.CENTER)); 

    jtfMessage= new JTextField("Type anything",SwingConstants.RIGHT); 
    jtfMessage.setHorizontalAlignment(SwingConstants.CENTER); 
    p1.add(jtfMessage); 

    parent.add(p1); 

    JPanel jpRadioButtons = new JPanel(); 
    jpRadioButtons.setLayout(new GridLayout(1,3)); 
    jpRadioButtons.add(jrbLeft= new JRadioButton("Left")); 
    jpRadioButtons.add(jrbCenter = new JRadioButton("Center")); 
    jpRadioButtons.add(jrbRight = new JRadioButton("Right")); 
    jpRadioButtons.setBorder(new TitledBorder("Horizontal Border")); 

    final JPanel p2 = new JPanel(); 
    p2.setLayout(new GridLayout(1,2,1,1)); 

    p2.add(jpRadioButtons); 

    JPanel p3 = new JPanel(); 
    p3.setLayout(new GridLayout(1,1,1,1)); 
    p3.add(new JLabel("Column Size")); 

    jtfColumn= new JTextField("60",SwingConstants.RIGHT); 
    jtfColumn.setHorizontalAlignment(SwingConstants.CENTER); 

    p3.add(jtfColumn);  
    Border lineBorder = new LineBorder(Color.LIGHT_GRAY,1); 
    p3.setBorder(lineBorder); 
    p2.add(p3); 
    parent.add(p2); 
    add(parent); 



    jrbLeft.addActionListener(
      new ActionListener() 
      { 
       public void actionPerformed(ActionEvent e) 
       { 
        jtfMessage.setHorizontalAlignment(SwingConstants.LEFT); 
        jrbCenter.setSelected(false); 
        jrbRight.setSelected(false); 
        jtfMessage.setColumns(Integer.parseInt(jtfColumn.getText())); 
       // p1.revalidate(); 
        // p1.repaint(); 
       } 
      } 
      ); 

    jrbCenter.addActionListener(
      new ActionListener() 
      { 
       public void actionPerformed(ActionEvent e) 
       { 
        jtfMessage.setHorizontalAlignment(SwingConstants.CENTER); 
        jrbLeft.setSelected(false); 
        jrbRight.setSelected(false); 
        jtfMessage.setColumns(Integer.parseInt(jtfColumn.getText())); 
       } 
      } 
      ); 

    jrbRight.addActionListener(
      new ActionListener() 
      { 
       public void actionPerformed(ActionEvent e) 
       { 
        jtfMessage.setHorizontalAlignment(SwingConstants.RIGHT); 
        jrbCenter.setSelected(false); 
        jrbLeft.setSelected(false); 
        jtfMessage.setColumns(Integer.parseInt(jtfColumn.getText())); 
       } 

      } 
      ); 

    } 

} 

ответ

1

Основная проблема заключается в GridLayout.

GridLayout, по дизайну, дает равную ширину и высоту компонентам в столбце/ширине на основе доступного пространства родительского контейнера.

Вместо этого попробуйте использовать что-то вроде FlowLayout или GridBagLayout, которые работают с компонентами предпочтительного размера вместо

+0

Я до сих пор возникли проблемы с кодом. Может ли кто-то поделиться новым пониманием. – user2918968

+0

Какие проблемы? Помните, что некоторые менеджеры макетов вернутся к минимальным размерам полей, если не могут выполнить предпочтительный размер ... Кроме того, не забудьте добавить 'p1.revalidate' и' p1.repaint' другим обработчикам кнопок. , – MadProgrammer

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