我目前使用的代码,但只显示表。我正在尝试在它下面添加一个文本字段,但我不确定我该怎么做。我也试图在文本字段上设置一个监听器,我也不太确定如何做到这一点。对不起,如果这是一个愚蠢的问题,我没有Java形式的经验
public class table extends JFrame {
JTable TestDB;
public table(){
setLayout(new FlowLayout());
String[] columnNames={"First Name","Last Name","Address"};
Object[][] data={{"Bob","Hazel","HelpMeDr"},{"Yo","Whattup","ezpz"}};
TestDB=new JTable(data,columnNames);
TestDB.setPreferredScrollableViewportSize(new Dimension(500,50));
TestDB.setFillsViewportHeight(true);
JScrollPane scrollPane=new JScrollPane(TestDB);
add(scrollPane);
}
}
您可以使用下一个代码添加文本字段
textField = new JTextField(20);
//add a listener
textField.addActionListener(this);
现在,为了在与文本字段交互后发生某些事情,您需要创建一个方法
public void actionPerformed(ActionEvent evt) {
//do this when action performed at the textfield
}
我建议您访问下一个网站以获取更多信息https://docs.oracle.com/javase/tutorial/uiswing/components/textfield.html
所有的拳头
JFrame
是why you should notset a listener on the text field
你没有!!你添加一个听众,巨大的差异。 @P Dev的答案在听众中很清楚。add
与框架对象,而是使用getContentPane().add
和setLayout
方法相同,因为你并没有真正在它自己的框架上使用它,它可能会在很多情况下使你的应用程序崩溃。见when should I use JFrame.add(component) and JFrame.getContentPane().add(component) in java
最后一点,简单来说,FlowLayout
只有在水平对齐组件时才会使用,就好像它是行中的文本一样。
而是使用像BoxLayout
这样的另一种布局
public Table() {
getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
String[] columnNames = {"First Name", "Last Name", "Address"};
Object[][] data = {{"Bob", "Hazel", "HelpMeDr"}, {"Yo", "Whattup", "ezpz"}};
TestDB = new JTable(data, columnNames);
TestDB.setPreferredScrollableViewportSize(new Dimension(500, 50));
TestDB.setFillsViewportHeight(true);
JScrollPane scrollPane = new JScrollPane(TestDB);
getContentPane().add(scrollPane);
JTextField textField = new JTextField();
getContentPane().add(textField);
}
最后一件事是文本组件有不少于10种类型的监听器,你必须使用符合你需要的那种,我们的朋友的答案(我upvoted)建议你将使用ActionListener
,它将在每次调用时调用用户在文本字段中单击“输入”。请参阅How to Use BoxLayout以更好地理解布局问题和快乐编码^ - ^。