如何改变JList?
How to change JList?
我正在开发一个带有一些按钮和 JList
的程序。
它非常简单,它唯一能做的就是显示 JList
中的点击次数。
这是一个学校课程,我必须用 JList
.
来完成
我设法让它与 JLabel
一起工作(计算所有点击并在底部显示),但与 JList
.
不兼容
有四个按钮,每个按钮都有自己的计数器。如何更新 JList
中的 JList
(单击特定按钮的次数)?
我为每个按钮制作了一个 int
变量,只要单击按钮,它就会在 actionPerformed
方法中更新。
JList
显示这些变量,按钮名称在其前面。
但它停留在 0
,我该如何更新 JList
?
import javax.swing.*;
import javax.swing.border.LineBorder;
import java.awt.*;
import java.awt.event.*;
public class Task1 extends JFrame implements ActionListener {
public int m1 = 0;
public int m2 = 0;
public int m3 = 0;
public int m4 = 0;
JButton Menue1;
JButton Menue2;
JButton Menue3;
JButton Menue4;
JLabel unten;
JLabel text;
JList<String> Liste;
public Task1(){
setTitle("Menüauswahl");
// Bereits gewählte Menüs
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(2, 1));
add(panel, BorderLayout.EAST);
text = new JLabel("Bereits gewählte Menüs ");
panel.add(text);
String[] menues = {"Menü 1: " + m1+"x", "Menü 2: " + m2+"x", "Menü 3: " + m3+"x", "Menü 4: " + m4+"x"};
Liste = new JList<String>(menues);
panel.add(Liste);
// Menürbar
JMenuBar menubar = new JMenuBar();
JMenu Datei = new JMenu("Datei");
menubar.add(Datei);
setJMenuBar(menubar);
// Gesamt Menüs
unten = new JLabel("Menüs Insgesamt: 0", SwingConstants.CENTER);
unten.setBorder(new LineBorder(Color.BLACK));
add(unten, BorderLayout.SOUTH);
// Menü-Auswahl / Buttons
JPanel panel1 = new JPanel();
panel1.setLayout(new GridLayout(2,2, 10, 10));
add(panel1, BorderLayout.CENTER);
Menue1 = new JButton("Menü 1");
Menue1.addActionListener(this);
panel1.add(Menue1);
Menue2 = new JButton("Menü 2");
Menue2.addActionListener(this);
panel1.add(Menue2);
Menue3 = new JButton("Menü 3");
Menue3.addActionListener(this);
panel1.add(Menue3);
Menue4 = new JButton("Menü 4");
Menue4.addActionListener(this);
panel1.add(Menue4);
//Fenster Config
setSize(450 , 300);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent click) {
if(click.getSource()==Menue1){
m1+=1;
System.out.println(m1);
unten.setText(String.format("Menüs Insgesamt: " + (m1+m2+m3+m4)));
}
if(click.getSource()==Menue2){
m2+=1;
System.out.println(m2);
unten.setText(String.format("Menüs Insgesamt: " + (m1+m2+m3+m4)));
}
if(click.getSource()==Menue3){
m3+=1;
System.out.println(m3);
unten.setText(String.format("Menüs Insgesamt: " + (m1+m2+m3+m4)));
}
if(click.getSource()==Menue4){
m4+=1;
System.out.println(m4);
unten.setText(String.format("Menüs Insgesamt: " + (m1+m2+m3+m4)));
}
}
public static void main(String[] args){
new Task1();
}
}
因为你的例子是学校级别的(不是冒犯,我只是不想全部重写),我们会保持简单。
截至目前,您是通过 JList
的构造函数
直接输入项目
String[] menues = {
"Menü 1: " + m1+"x",
"Menü 2: " + m2+"x",
"Menü 3: " + m3+"x",
"Menü 4: " + m4+"x"
};
Liste = new JList<String>(menues);
这仅适用于展示,因为您无权访问能够更新的 ListModel
。
因此我们需要自己实例化一个 DefaultListModel
private final DefaultListModel<String> listModel;
并添加我们的初始值
listModel = new DefaultListModel<>();
listModel.addElement("Menü 1: 0x");
listModel.addElement("Menü 2: 0x");
listModel.addElement("Menü 3: 0x");
listModel.addElement("Menü 4: 0x");
现在,用 DefaultListModel
构建 JList
Liste = new JList<>(listModel);
然后我们可以直接在 actionPerformed
中使用我们的模型更新列表项
if (click.getSource() == Menue1) {
...
listModel.setElementAt("Menü 1: " + m1 + "x", 0); // Indexes start at 0!
}
if (click.getSource() == Menue2) {
...
listModel.setElementAt("Menü 2: " + m2 + "x", 1);
}
if (click.getSource() == Menue3) {
...
listModel.setElementAt("Menü 3: " + m3 + "x", 2);
}
if (click.getSource() == Menue4) {
...
listModel.setElementAt("Menü 4: " + m4 + "x", 3);
}
无论如何,记得read the documentation,永远!
我正在开发一个带有一些按钮和 JList
的程序。
它非常简单,它唯一能做的就是显示 JList
中的点击次数。
这是一个学校课程,我必须用 JList
.
我设法让它与 JLabel
一起工作(计算所有点击并在底部显示),但与 JList
.
有四个按钮,每个按钮都有自己的计数器。如何更新 JList
中的 JList
(单击特定按钮的次数)?
我为每个按钮制作了一个 int
变量,只要单击按钮,它就会在 actionPerformed
方法中更新。
JList
显示这些变量,按钮名称在其前面。
但它停留在 0
,我该如何更新 JList
?
import javax.swing.*;
import javax.swing.border.LineBorder;
import java.awt.*;
import java.awt.event.*;
public class Task1 extends JFrame implements ActionListener {
public int m1 = 0;
public int m2 = 0;
public int m3 = 0;
public int m4 = 0;
JButton Menue1;
JButton Menue2;
JButton Menue3;
JButton Menue4;
JLabel unten;
JLabel text;
JList<String> Liste;
public Task1(){
setTitle("Menüauswahl");
// Bereits gewählte Menüs
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(2, 1));
add(panel, BorderLayout.EAST);
text = new JLabel("Bereits gewählte Menüs ");
panel.add(text);
String[] menues = {"Menü 1: " + m1+"x", "Menü 2: " + m2+"x", "Menü 3: " + m3+"x", "Menü 4: " + m4+"x"};
Liste = new JList<String>(menues);
panel.add(Liste);
// Menürbar
JMenuBar menubar = new JMenuBar();
JMenu Datei = new JMenu("Datei");
menubar.add(Datei);
setJMenuBar(menubar);
// Gesamt Menüs
unten = new JLabel("Menüs Insgesamt: 0", SwingConstants.CENTER);
unten.setBorder(new LineBorder(Color.BLACK));
add(unten, BorderLayout.SOUTH);
// Menü-Auswahl / Buttons
JPanel panel1 = new JPanel();
panel1.setLayout(new GridLayout(2,2, 10, 10));
add(panel1, BorderLayout.CENTER);
Menue1 = new JButton("Menü 1");
Menue1.addActionListener(this);
panel1.add(Menue1);
Menue2 = new JButton("Menü 2");
Menue2.addActionListener(this);
panel1.add(Menue2);
Menue3 = new JButton("Menü 3");
Menue3.addActionListener(this);
panel1.add(Menue3);
Menue4 = new JButton("Menü 4");
Menue4.addActionListener(this);
panel1.add(Menue4);
//Fenster Config
setSize(450 , 300);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent click) {
if(click.getSource()==Menue1){
m1+=1;
System.out.println(m1);
unten.setText(String.format("Menüs Insgesamt: " + (m1+m2+m3+m4)));
}
if(click.getSource()==Menue2){
m2+=1;
System.out.println(m2);
unten.setText(String.format("Menüs Insgesamt: " + (m1+m2+m3+m4)));
}
if(click.getSource()==Menue3){
m3+=1;
System.out.println(m3);
unten.setText(String.format("Menüs Insgesamt: " + (m1+m2+m3+m4)));
}
if(click.getSource()==Menue4){
m4+=1;
System.out.println(m4);
unten.setText(String.format("Menüs Insgesamt: " + (m1+m2+m3+m4)));
}
}
public static void main(String[] args){
new Task1();
}
}
因为你的例子是学校级别的(不是冒犯,我只是不想全部重写),我们会保持简单。
截至目前,您是通过 JList
的构造函数
String[] menues = {
"Menü 1: " + m1+"x",
"Menü 2: " + m2+"x",
"Menü 3: " + m3+"x",
"Menü 4: " + m4+"x"
};
Liste = new JList<String>(menues);
这仅适用于展示,因为您无权访问能够更新的 ListModel
。
因此我们需要自己实例化一个 DefaultListModel
private final DefaultListModel<String> listModel;
并添加我们的初始值
listModel = new DefaultListModel<>();
listModel.addElement("Menü 1: 0x");
listModel.addElement("Menü 2: 0x");
listModel.addElement("Menü 3: 0x");
listModel.addElement("Menü 4: 0x");
现在,用 DefaultListModel
JList
Liste = new JList<>(listModel);
然后我们可以直接在 actionPerformed
if (click.getSource() == Menue1) {
...
listModel.setElementAt("Menü 1: " + m1 + "x", 0); // Indexes start at 0!
}
if (click.getSource() == Menue2) {
...
listModel.setElementAt("Menü 2: " + m2 + "x", 1);
}
if (click.getSource() == Menue3) {
...
listModel.setElementAt("Menü 3: " + m3 + "x", 2);
}
if (click.getSource() == Menue4) {
...
listModel.setElementAt("Menü 4: " + m4 + "x", 3);
}
无论如何,记得read the documentation,永远!