我目前正在尝试在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);
}
}
答案 0 :(得分:0)
您的JPanel
p2
在CENTER
对齐方式中不包含任何内容,因此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
如何理解原因。它不是按百分比分割区域,而是用于围绕中心面板排列组件。布局的顺序是:
你printArea
的首选高度是“巨大的”(技术术语!),所以它试图使用它。进入中心面板后,系统会告知仅使用剩余空间:由于p1
的首选高度小于p2
高度,因此中心面板会获得剩余高度,您仍然可以看到printArea
。如果在使用NORTH / SOUTH时反转添加顺序,也可以看到此效果;然后,您只能看到printArea
,而不是p1
表单。
如果你看一下JDK中BorderLayout
的来源,你可以看到layoutContainer
方法,这一切都发生了。