JList中的多行java [英] Multiple lines in JList java
问题描述
学校1
- 教育1
- 学生1
- 学生2
- 教育2
- 学生3
学校2
等
等。
我一直在阅读关于使用单元格渲染器,但我不确定它是否工作,因为我没有创建一个表。请给我建议使用什么。
祝贺
Jakob
Btw我不想使用TextArea,因为我想挑战自己。
我一直在阅读关于使用单元格渲染器,但我不确定它是否工作,因为我没有创建一个表。
有不同的渲染器为不同的组件。 JList
有一个 JTabele
您需要使用 ListCellRender
,它是 JList
单元格的渲染器。渲染器使用组件
来包含其内容。使用组件
,您不能使用下一行\\\
,因此您需要使用HTML。
您可以在这里查看更多 ListCellRenderer
这里有一个例子,我使用学生对象作为列表的值
class Student {
String name;
int age;
public Student(String name,int age){
this.name = name;
this.age = age;
}
public String getName(){return name; }
public int getAge(){return age; }
}
这里是渲染的一部分,我设置文本
@Override
public Component getListCellRendererComponent(
JList list,Object value,int index,
boolean isSelected,boolean cellHasFocus){
super.getListCellRendererComponent(list,value,index,isSelected,cellHasFocus);
学生标签=(学生)值;
String name = label.getName();
int age = label.getAge();
String labelText =< html> + name +< br />年龄;
setText(labelText);
返回此;
}
以下是完整示例
import java.awt.Component;
import javax.swing.DefaultListCellRenderer;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.SwingUtilities;
public class Test3 {
JList< Student>列表;
DefaultListModel模型;
public Test3(){
list = new JList();
model = new DefaultListModel(); (int i = 0; i< 10; i ++){
model.addElement(new Student(Paul+ i,i));
}
list.setModel(model);
list.setCellRenderer(new MyListCellRenderer());
JFrame frame = new JFrame(Test);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(list);
frame.pack();
frame.setVisible(true);
}
public static void main(String [] args){
SwingUtilities.invokeLater(new Runnable(){
public void run(){
new Test3();
}
});
}
private class MyListCellRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(
JList list,Object value,int index,
boolean isSelected,boolean cellHasFocus){
super.getListCellRendererComponent(list,value,index,isSelected,cellHasFocus);
学生标签=(学生)值;
String name = label.getName();
int age = label.getAge();
String labelText =< html> Name:+ name +< br /> Age:+ age;
setText(labelText);
返回此;
}
}
}
class学生{
字符串名称;
int age;
public Student(String name,int age){
this.name = name;
this.age = age;
}
public String getName(){return name; }
public int getAge(){return age; }
}
I'm currently working on a school project regarding school administration. In my project it is possible to create a school, education and students. I'm currently adding them all into the same JList(School), and it is giving me one problem. Whenever I'm adding for example a student it goes into the same line on the JList which makes it too long and I'm hoping for a way to do something like this on it:
School 1
- Education 1
- Student 1
- Student 2
- Education 2
- Student 3
School 2
etc.
etc.
I've been reading about using cell renderer but I'm not sure that it works since I'm not creating a table. Please advice me about what to use.
Regards Jakob
Btw I don't want to use TextArea since I want to challenge myself.
"I've been reading about using cell renderer but I'm not sure that it works since I'm not creating a table. "
There are different renderers for different components. JList
has one and so does a JTabele
You need to use a ListCellRender
, which is a renderer for a JList
cell. The renderer uses a Component
to contain its content. With Component
you can't use the next line carriage "\n", so you need to use HTML.
You can see more here ListCellRenderer
Here's an example, where I use a Student Object as the value for the list
class Student {
String name;
int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() { return name; }
public int getAge() { return age; }
}
And here is the part of the render where I set the text
@Override
public Component getListCellRendererComponent(
JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
Student label = (Student) value;
String name = label.getName();
int age = label.getAge();
String labelText = "<html>" + name + "<br/>" + age;
setText(labelText);
return this;
}
Here's the complete example
import java.awt.Component;
import javax.swing.DefaultListCellRenderer;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.SwingUtilities;
public class Test3 {
JList<Student> list;
DefaultListModel model;
public Test3() {
list = new JList();
model = new DefaultListModel();
for (int i = 0; i < 10; i++) {
model.addElement(new Student("Paul" + i, i));
}
list.setModel(model);
list.setCellRenderer(new MyListCellRenderer());
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(list);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Test3();
}
});
}
private class MyListCellRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(
JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
Student label = (Student) value;
String name = label.getName();
int age = label.getAge();
String labelText = "<html>Name: " + name + "<br/>Age: " + age;
setText(labelText);
return this;
}
}
}
class Student {
String name;
int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() { return name; }
public int getAge() { return age; }
}
这篇关于JList中的多行java的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!