Java 如何将2个JLists添加到一个JScrollPane?
想象一下一群有名字和年龄的人。我希望我的应用程序的用户能够滚动浏览并按姓名选择此组的成员,同时在右侧显示他们的年龄。因此,我基本上希望在一个JScrollPane中添加两个JLists,两个JLists同步滚动(向下滚动会显示下一个姓名和年龄)。值得一提的是,包含年龄的JList不必与名称一起选择,关键的一点是,它必须与名称同步才能滚动 我尝试了几个想法,最终得到了以下代码:Java 如何将2个JLists添加到一个JScrollPane?,java,swing,user-interface,jscrollpane,jlist,Java,Swing,User Interface,Jscrollpane,Jlist,想象一下一群有名字和年龄的人。我希望我的应用程序的用户能够滚动浏览并按姓名选择此组的成员,同时在右侧显示他们的年龄。因此,我基本上希望在一个JScrollPane中添加两个JLists,两个JLists同步滚动(向下滚动会显示下一个姓名和年龄)。值得一提的是,包含年龄的JList不必与名称一起选择,关键的一点是,它必须与名称同步才能滚动 我尝试了几个想法,最终得到了以下代码: public class Main { public static void main(String ar
public class Main {
public static void main(String args[]) {
Main main = new Main();
main.go();
}
private void go() {
String[] words = {"David", "Stephanie", "Mark", "Michelle", "Simon", "Rupert",
"Mitchell", "Charles", "Owen"};
String[] numbers = {"43","12","15","65","12","76","33","45","34"};
JFrame frame = new JFrame();
JPanel background = new JPanel();
JList<String> listOne = new JList<String>(words);
JList<String> listTwo = new JList<String>(numbers);
JPanel listPanel = new JPanel();
listPanel.add(listOne);
listPanel.add(listTwo);
JScrollPane scrollPane = new JScrollPane(listPanel);
background.add(scrollPane);
frame.getContentPane().add(background);
frame.setVisible(true);
frame.pack();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
公共类主{
公共静态void main(字符串参数[]){
Main Main=新Main();
main.go();
}
私人空间{
String[]words={“David”、“Stephanie”、“Mark”、“Michelle”、“Simon”、“Rupert”,
“米切尔”、“查尔斯”、“欧文”};
字符串[]数字={“43”、“12”、“15”、“65”、“12”、“76”、“33”、“45”、“34”};
JFrame=新JFrame();
JPanel background=新的JPanel();
JList listOne=新JList(单词);
JList listTwo=新JList(编号);
JPanel listPanel=newjpanel();
添加(listOne);
添加(listTwo);
JScrollPane scrollPane=新的JScrollPane(列表面板);
添加(滚动窗格);
frame.getContentPane().add(后台);
frame.setVisible(true);
frame.pack();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
如果有人能提出一个更好的方法,那么请放心,但我的问题是,我如何实现上述功能
提前谢谢
因此,我基本上希望在一个JScrollPane中添加两个JLists,两个JLists同步滚动(向下滚动会显示下一个姓名和年龄)
你的问题是XY,因为你并不真的想要这个。相反,您应该使用构建用于显示多列表格数据的组件——JTable。我认为部分问题在于数据的错误并行数组结构。而是创建一个类来保存字符串和数字,然后创建此类项的集合或数组
e、 g
因此,我基本上希望在一个JScrollPane中添加两个JLists,两个JLists同步滚动(向下滚动会显示下一个姓名和年龄)
你的问题是XY,因为你并不真的想要这个。相反,您应该使用构建用于显示多列表格数据的组件——JTable。我认为部分问题在于数据的错误并行数组结构。而是创建一个类来保存字符串和数字,然后创建此类项的集合或数组
e、 g
在实际应用程序中,我确实使用了一个包含字符串和数字的类,这只是一个示例。不管你怎么说,JTable是我想要的,非常感谢!在实际应用程序中,我确实使用了一个包含字符串和数字的类,这只是一个示例。不管你怎么说,JTable是我想要的,非常感谢!
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class Main2 extends JPanel {
private static final String[] COLUMNS = {"Name", "Age"};
private Person[] people = {
new Person("David", 43),
new Person("Stephanie", 12),
new Person("Mark", 15),
new Person("Michelle", 65)
};
public Main2() {
DefaultTableModel tableModel = new DefaultTableModel(COLUMNS, 0);
for (Person person : people) {
Object[] row = {person.getName(), person.getAge()};
tableModel.addRow(row);
}
add(new JScrollPane(new JTable(tableModel)));
}
private static void createAndShowGui() {
Main2 mainPanel = new Main2();
JFrame frame = new JFrame("Main2");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
class Person {
private String name;
private int age; // although Date for birthdate would be better
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}