JScrollPane不与JPanel一起工作
问题描述:
我试图添加与JTextArea
滚动条,但它不起作用,并且内容不在textArea中。我跟着几篇文章,但没有发现任何与JPanel的例子,所有的例子都可以用JFrame
。目前我们限于使用JFrame
,所以我们必须在不使用它的情况下执行此操作。请找到下面的代码,我试图用teatArea实现滚动,请指导我做错了什么。帮助将不胜感激。JScrollPane不与JPanel一起工作
代码
public class CreatePanel extends JPanel
{
private Vector athleteList;
private CountPanel cPanel;
private JTextField txt_firstName;
private JTextField txt_lastName;
private JTextField txt_sport;
private JButton btnNewButton;
private JLabel lbl_error;
private JLabel lblNewLabel;
private JLabel lblNewLabel_1;
private JLabel lblNewLabel_2;
private JList list;
private JTextArea textArea;
//Constructor initializes components and organize them using certain layouts
public CreatePanel(Vector athleteList, CountPanel cPanel)
{
this.athleteList = athleteList;
this.cPanel = cPanel;
ButtonListener buttonListener = new ButtonListener();
//organize components here
txt_firstName = new JTextField();
txt_firstName.setColumns(10);
txt_lastName = new JTextField();
txt_lastName.setColumns(10);
txt_sport = new JTextField();
txt_sport.setColumns(10);
lblNewLabel = new JLabel("First Name");
lblNewLabel_1 = new JLabel("Last Name");
lblNewLabel_2 = new JLabel("Sport");
lbl_error = new JLabel("error");
lbl_error.setForeground(Color.RED);
lbl_error.setVisible(false);
list = new JList<Athlete>();
btnNewButton = new JButton("Create an Athlete");
btnNewButton.addActionListener(new ButtonListener());
textArea = new JTextArea(16,58);
JScrollPane scroll = new JScrollPane (textArea);
scroll.setVerticalScrollBarPolicy (ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
textArea.setEditable(false);
add(scroll);
GroupLayout groupLayout = new GroupLayout(this);
groupLayout.setHorizontalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addContainerGap()
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(lblNewLabel)
.addComponent(lblNewLabel_1)
.addComponent(lblNewLabel_2))
.addGap(53)
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(txt_firstName, GroupLayout.DEFAULT_SIZE, 87, Short.MAX_VALUE)
.addComponent(txt_lastName, GroupLayout.DEFAULT_SIZE, 87, Short.MAX_VALUE)
.addComponent(txt_sport, GroupLayout.DEFAULT_SIZE, 87, Short.MAX_VALUE)))
.addGroup(groupLayout.createSequentialGroup()
.addGap(59)
.addComponent(btnNewButton)))
.addGroup(groupLayout.createSequentialGroup()
.addContainerGap()
.addComponent(lbl_error)))
.addGap(5)
.addComponent(textArea, GroupLayout.DEFAULT_SIZE, 234, Short.MAX_VALUE)
.addContainerGap())
);
groupLayout.setVerticalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addGap(47)
.addComponent(lbl_error)
.addGap(53)
.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
.addComponent(txt_firstName, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(lblNewLabel))
.addPreferredGap(ComponentPlacement.UNRELATED)
.addGroup(groupLayout.createParallelGroup(Alignment.TRAILING)
.addComponent(lblNewLabel_1)
.addComponent(txt_lastName, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addPreferredGap(ComponentPlacement.UNRELATED)
.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
.addComponent(txt_sport, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(lblNewLabel_2))
.addPreferredGap(ComponentPlacement.UNRELATED)
.addComponent(btnNewButton))
.addGroup(groupLayout.createSequentialGroup()
.addContainerGap()
.addComponent(textArea, GroupLayout.DEFAULT_SIZE, 278, Short.MAX_VALUE)))
.addContainerGap())
);
setLayout(groupLayout);
}
//ButtonListener is a listener class that listens to
//see if the button "Create an Athlete" is pushed.
//When the event occurs, it adds an athlete using the information
//entered by a user.
//It also performs error checking.
private class ButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
//TO BE COMPLETED
if(txt_firstName.getText().length() == 0 || txt_lastName.getText().length() == 0 || txt_sport.getText().length() == 0)
{
lbl_error.setText("Please enter all fields.");
lbl_error.setVisible(true);
}
else
{
Athlete athlete = new Athlete();
athlete.setFirstName(txt_firstName.getText());
athlete.setLastName(txt_lastName.getText());
athlete.setSport(txt_sport.getText());
athleteList.add(athlete);
textArea.setText(textArea.getText().concat(athlete.toString()));
lbl_error.setText("athlete added.");
//clearControls();
}
} //end of actionPerformed method
} //end of ButtonListener class
private void clearControls()
{
txt_firstName.setText("");
txt_lastName.setText("");
txt_sport.setText("");
}
} //end of CreatePanel class
答
你GroupLayout
不要在scroll
添加到布局,但textArea
:
.addComponent(textArea, GroupLayout.DEFAULT_SIZE, 234, Short.MAX_VALUE)
尝试添加scroll
像
.addComponent(scroll, GroupLayout.DEFAULT_SIZE, 234, Short.MAX_VALUE)