无法在运行时调整文本字段的大小

时间:2013-12-10 00:11:40

标签: java swing layout-manager

我再次更改了代码。但是现在当我运行代码时,文本框非常小。只有当我选择左,中或右对齐时,文本框大小才会改变。 我在哪里弄错了。

我写了以下程序。当我单击左,右或中心按钮时,程序还应读取列大小文本框中的值,然后自动调整消息文本字段的大小。我似乎无法做到这一点。任何见解将不胜感激。 package workingwithjtextfields;

   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 个答案:

答案 0 :(得分:1)

主要问题在于GridLayout

GridLayout,根据设计,根据父容器的可用空间给出列/宽度中的组件相等的宽度和高度。

相反,请尝试使用FlowLayoutGridBagLayout等代替首选大小的组件