通过按钮将一个JPanel上的JTextField的字符串发送到另一个JPanel上的JTextArea

时间:2014-05-25 16:20:48

标签: java swing jpanel jtextfield jtextarea

我目前正在尝试在textField'itemName'中输入打印文本并将其打印在文本区域'printArea'上。当我在同一个JPanel(p1)上同时拥有printArea和itemName时,它可以正常工作。当printArea设置为单独的JPanel(p1上的itemName和p2上的printArea)时,不打印任何内容。两个JPanel用于使GUI显示为已分配。我相信这个问题的区域是我将JPanel'p1'添加到JPanel'p2'的地方。

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

public class MovieGUI extends JFrame{

JButton submit = new JButton("Submit");
JTextField itemName = new JTextField();
JTextField itemPrice = new JTextField();
JTextField itemQuantity = new JTextField();
JTextArea printArea = new JTextArea(400,400);


public MovieGUI(){


        JPanel p1 = new JPanel();

        p1.setLayout(new GridLayout(6, 2));



        p1.add(new JLabel("Item Name"));
        p1.add(itemName);   //p1.add(new JTextField(8));
        p1.add(new JLabel("Item Price"));
        p1.add(itemPrice);  // p1.add(new JTextField(8));
        p1.add(new JLabel("Quantity"));
        p1.add(itemQuantity);   //p1.add(new JTextField(8));
        p1.add(new JLabel("submit"));
        p1.add(submit);

        //Something is not working... 

        JPanel p2 = new JPanel(new BorderLayout());
            p2.setLayout(new BorderLayout());
            p2.add(p1, BorderLayout.NORTH);

        p2.add(printArea, BorderLayout.SOUTH);
        //add(p1);  
        add(p2);

        event e = new event();
        submit.addActionListener(e);
    }


    public class event implements ActionListener{
        public void actionPerformed(ActionEvent e){
            String text = itemName.getText();

            printArea.setText(text);   //printArea.setText("BUTTON");


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


        MovieGUI frame = new MovieGUI();
        frame.setTitle("Submission");
        frame.setSize(800, 500);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }


} 

2 个答案:

答案 0 :(得分:0)

您的JPanel p2CENTER对齐方式中不包含任何内容,因此printArea不会在SOUTH对齐方式上查看。要查看inputItem上的printArea文字从

更改
p2.add(printArea, BorderLayout.SOUTH);

p2.add(printArea, BorderLayout.CENTER);

答案 1 :(得分:0)

您的文字正在printArea中打印,但printArea的第一行(以及更多)隐藏在p1后面。这是因为printArea的南方位置填充了整个p2,但它的z-index意味着它位于p1之后。如果你这样做,你可以看到:

p2.add(printArea, BorderLayout.SOUTH);
printArea.setBackground(Color.BLUE);
p2.setComponentZOrder(printArea, 0); // now the blue printArea hides the form elements in p1

要解决此问题:将printArea更改为CENTER而不是SOUTH

为什么?

有助于了解BorderLayout如何理解原因。它不是按百分比分割区域,而是用于围绕中心面板排列组件。布局的顺序是:

  1. 北/南组件将使用首选高度,然后使用它们所在组件的宽度。
  2. 我会在这里忽略东/西,因为你没有使用它们。
  3. 中心将在N / S / E / W组件大小调整后使用剩余空间
  4. printArea的首选高度是“巨大的”(技术术语!),所以它试图使用它。进入中心面板后,系统会告知仅使用剩余空间:由于p1的首选高度小于p2高度,因此中心面板会获得剩余高度,您仍然可以看到printArea。如果在使用NORTH / SOUTH时反转添加顺序,也可以看到此效果;然后,您只能看到printArea,而不是p1表单。

    如果你看一下JDK中BorderLayout的来源,你可以看到layoutContainer方法,这一切都发生了。