Как обновить JList?
Что я хочу от этой программы, так это то, что при нажатии на первую кнопку будет отображаться назначенный массив, а при нажатии на вторую кнопку - очистить список и отображать назначенный массив, я искал решение в Интернете, и многие люди предлагают использование списка моделей, любые советы приветствуются.
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class tester extends JFrame{
private JList list = new JList();
private JButton b1 = new JButton("Array1");
private JButton b2 = new JButton("Array2");
public tester(){
final String [] Array1 = {"1", "2", "3", "4"};
final String [] Array2 = {"one", "two", "three", "four"};
JPanel p1 = new JPanel();
p1.add(new JScrollPane(list));
p1.add(b1);
p1.add(b2);
add(p1, BorderLayout.CENTER);
b1.addActionListener(new ActionListener (){
public void actionPerformed(ActionEvent e){
DefaultListModel Model1 = (DefaultListModel)list.getModel();
for(int i = 0; i < Array1.length; i++){
Model1.addElement(Array1[i]);
}
}
});
b2.addActionListener(new ActionListener (){
public void actionPerformed(ActionEvent e){
DefaultListModel Model2 = (DefaultListModel)list.getModel();
for(int i = 0; i < Array2.length; i++){
Model2.addElement(Array2[i]);
}
}
});
}
public static void main (String [] args){
tester t1= new tester();
t1.pack();
t1.setLocationRelativeTo(null);
t1.setTitle("Test");
t1.setVisible(true);
t1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
3 ответа
Попробуй это:
b1.addActionListener(new ActionListener (){
@Override
public void actionPerformed(ActionEvent e){
DefaultListModel Model1 = new DefaultListModel();
for(int i = 0; i < Array1.length; i++){
Model1.addElement(Array1[i]);
}
list.setModel(Model1);
}
});
b2.addActionListener(new ActionListener (){
@Override
public void actionPerformed(ActionEvent e){
DefaultListModel Model2 = new DefaultListModel();
for (String Array21 : Array2) {
Model2.addElement(Array21);
}
list.setModel(Model2);
}
});
Вы получаете ClassDCastException
потому что вы пытаетесь разыграть (DefaultListModel)
к модели, которая не DefaultListModel
, Сначала вам нужно установить модель в список DefaultListModel
как это
DefaultListModel model = new DefaultListModel();
list.setModel(model);
Это избавит от ClassCastException
когда ты это делаешь
DefaultListModel Model1 = (DefaultListModel)list.getModel();
Также у вас нет кнопки для очистки, только для добавления массивов. Таким образом, вы хотите, чтобы кнопка очистить и в actionPerformed
просто используйте
model.removeAllElements();
Вот реорганизованная версия вашего кода, которая работает
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class tester extends JFrame {
private JList list = new JList();
private JButton b1 = new JButton("Array1");
private JButton b2 = new JButton("Array2");
private JButton clear = new JButton("Clear");
private DefaultListModel model;
public tester() {
final String[] Array1 = {"1", "2", "3", "4"};
final String[] Array2 = {"one", "two", "three", "four"};
model = new DefaultListModel();
list.setModel(model);
JPanel p1 = new JPanel();
p1.add(new JScrollPane(list));
p1.add(b1);
p1.add(b2);
p1.add(clear);
add(p1, BorderLayout.CENTER);
clear.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
model.removeAllElements();
}
});
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DefaultListModel Model1 = (DefaultListModel) list.getModel();
for (int i = 0; i < Array1.length; i++) {
Model1.addElement(Array1[i]);
}
}
});
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DefaultListModel Model2 = (DefaultListModel) list.getModel();
for (int i = 0; i < Array2.length; i++) {
Model2.addElement(Array2[i]);
}
}
});
}
public static void main(String[] args) {
tester t1 = new tester();
t1.pack();
t1.setLocationRelativeTo(null);
t1.setTitle("Test");
t1.setVisible(true);
t1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
вот образец для вас
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class Main {
private static int i = 1;
public static void main(String args[]) {
JFrame frame = new JFrame("Demo Frame/SuRu");
Container contentPane = frame.getContentPane();
Container contentPane2 = new JPanel(new GridLayout(3, 1));
contentPane.setLayout(new BorderLayout());
final DefaultListModel model = new DefaultListModel();
final JList jList = new JList(model);
JButton addButton = new JButton("Add Element");
JButton removeButton = new JButton("Remove Element");
JButton removeAllButton = new JButton("Remove All");
contentPane2.add(addButton);
contentPane2.add(removeButton);
contentPane2.add(removeAllButton);
contentPane.add(new JScrollPane(jList), BorderLayout.CENTER);
contentPane.add(contentPane2, BorderLayout.EAST);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(100, 100, 500, 350);
frame.setVisible(true);
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
model.addElement("Element " + i);
i++;
}
});
removeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
if (jList.getSelectedIndex() != -1) {
model.remove(jList.getSelectedIndex());
}
}
});
removeAllButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
model.removeAllElements();
}
});
}
}