gpt4 book ai didi

java - 在 JList 上添加 JScrollPane 而不使用 JPanel

转载 作者:行者123 更新时间:2023-12-01 23:21:08 25 4
gpt4 key购买 nike

我的程序需要帮助。我需要在 JList 上放置 JScrollPane,而不将 JList 放在 JPanel 上。

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;

public class refurbished extends JFrame implements ActionListener {
ArrayList<String> names;
JButton add;
JTextField inputName;
JScrollPane scrollName;
JList nameList;

public refurbished() {
setSize(700,500);
setLayout(null);

names = new ArrayList<String>();

add = new JButton("Add");
add.setBounds(25,200,90,30);
add.setBackground(Color.WHITE);
add.addActionListener(this);

inputName = new JTextField();
inputName.setBounds(150,350,150,30);

nameList = new JList(names.toArray());

scrollName = new JScrollPane(nameList);
scrollName.setBounds(150,75,150,200);

getContentPane().add(add);
getContentPane().add(inputName);
getContentPane().add(scrollName);

setVisible(true);
}

public void actionPerformed (ActionEvent buttonclick) {
if (buttonclick.getSource() == add) {
names.add(inputName.getText().toLowerCase());
nameList = new JList(names.toArray());
scrollName = new JScrollPane(nameList);
scrollName.setBounds(150,75,150,200);
}
}

public static void main (String[] args) {
refurbished r = new refurbished();
}

}

你能帮我吗?我真的需要您的帮助,因为这是我的代码中唯一缺少的功能。

非常感谢您的帮助。

最佳答案

您尚未将列表添加到滚动 Pane 。您仅将列表添加到内容 Pane 。

scrollName = new JScrollPane();
scrollNumber = new JScrollPane();

getContentPane().add(nameList); <-- Get rid of this
getContentPane().add(numberList); <-- Get rid of this

你需要这个

scrollName = new JScrollPane(nameList);
scrollNumber = new JScrollPane(numberList);

getContentPane().add(scrollName);
getContentPane().add(scrollNumber);

正如 @Alex2410 在下面的评论中指出的,“您还需要使用 LayoutManager,或者将 Bounds 设置为 JScrollPane 而不是 JList”

更新:对原始海报更新

在添加或删除组件后,您需要同时进行 revalidate() repaint() 操作。在 repaint() 之前添加 revalidate()。您只需要在方法中 revalidate() repaint() 一次

<小时/>

编辑:如果要更新列表,请使用 ListModel。您不需要用新列表替换整个列表

请参阅此代码。我所做的是使用 DefaultListModel 并将该模型设置为 Jlist。然后您可以动态地将元素添加到列表中。我修复了你的代码并且它有效。我对添加的内容和删除的内容发表了评论

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;

public class refurbished extends JFrame implements ActionListener {

ArrayList<String> names;
JButton add;
JTextField inputName;
JScrollPane scrollName;
JList nameList;
DefaultListModel model; <-- declare DefaultListModel

public refurbished() {
setSize(700, 500);
setLayout(null);

names = new ArrayList<String>();

add = new JButton("Add");
add.setBounds(25, 200, 90, 30);
add.setBackground(Color.WHITE);
add.addActionListener(this);

inputName = new JTextField();
inputName.setBounds(150, 350, 150, 30);

model = new DefaultListModel(); <-- Initialize model
nameList = new JList(model); <-- set model to list

scrollName = new JScrollPane(nameList);
scrollName.setBounds(150, 75, 150, 200);

getContentPane().add(add);
getContentPane().add(inputName);
getContentPane().add(scrollName);

setVisible(true);
}

public void actionPerformed(ActionEvent buttonclick) {
if (buttonclick.getSource() == add) {
//names.add(inputName.getText().toLowerCase());
//nameList = new JList(names.toArray()); <-- don't need all this
//scrollName = new JScrollPane(nameList);
//scrollName.setBounds(150, 75, 150, 200);
String name = inputName.getText(); <-- get input
names.add(name);
model.addElement(name); <-- add name to model
}
}

public static void main(String[] args) {
refurbished r = new refurbished();
}
}

看看Using Models 。您应该花时间学习 MVC(模型、 View 、 Controller )范例。

关于java - 在 JList 上添加 JScrollPane 而不使用 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20631401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com