gpt4 book ai didi

java - 对象数组到 JList 和 JList 到 JPanel

转载 作者:行者123 更新时间:2023-12-02 02:57:32 25 4
gpt4 key购买 nike

我有以下两个类,其基本目的是创建对象数组...

class MovieInfo
{ private String movieTitle;
private String movieRating;
private String movieImg;
private String movieShowTimes;
private static double adultPrice;
private static double childPrice;
MovieInfo(String title, String rating, String img, String showTimes)
{
movieTitle = title;
movieRating = rating;
movieImg = img;
movieShowTimes = showTimes;

}
/*....sets gets methods.... */
}

///////////////////////////////
class MovieList
{

MovieInfo[] mList;

public void createList()
{

mList = new MovieInfo[22];

mList[0] = new MovieInfo("A United Kingdom","PG","A_United_Kingdom.jpg","yyyn");
mList[1] = new MovieInfo("Amitiville The Awakening","18A","AmitivilleAwakening.jpg","yyyn");
mList[2] = new MovieInfo("Arrival","14A","arrival.jpg","yyyy");
mList[3] = new MovieInfo("Baywatch","14A","baywatch.jpg","yyyy");
mList[4] = new MovieInfo("Beauty and the Beast","PG","Beauty_and_the_Beast.jpg","yyyn");
}
}

我还有附加到 JPanel 和单选按钮的 JList。我的问题是,当我单击第一个 rbutton 时,我无法获取如何在该 JList 上显示 mList[0] 中的电影名称,当我单击第二个 rbutton 时如何显示 mList[1] 中的电影名称等等......

是的,我知道我需要为我的 rbuttons 注册监听器并将它们分组并添加 ItemStateChange (只是不想在此处添加太多代码)...我在这里询问有关

行之后的逻辑
    if(e.getSource() instanceof JRadioButton)
{

请帮忙!任何想法都将受到高度赞赏!

最佳答案

您可以编写自定义 CellRenderer,如 docs 中所示.

例如,拥有一个 Movie bean 和一个扩展 DefaultListCellRendererMoviesListCellRenderer,您最终可能会得到如下结果:

public class JListCards {
private JFrame frame;
private JPanel radiosPane;
private JRadioButton[] radios;
private String[] radiosNames = {"Movie", "Classification", "Price"};
private JList <Movie> moviesList;
private ButtonGroup group;

private Movie[] movies = new Movie[] {
new Movie("Happy Feet", "AA", 10),
new Movie("Star Wars", "B12", 15),
new Movie("Logan", "C", 20)
};

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new JListCards().createAndShowGui());
}

public void createAndShowGui() {
frame = new JFrame(getClass().getSimpleName());

radiosPane = new JPanel(new GridLayout(1, 3));
radios = new JRadioButton[3];
group = new ButtonGroup();

for (int i = 0; i < radios.length; i++) {
radios[i] = new JRadioButton(radiosNames[i]);
radios[i].addActionListener(listener);
radiosPane.add(radios[i]);
group.add(radios[i]);
}

radios[0].setSelected(true);
moviesList = new JList<Movie>(movies);
moviesList.setCellRenderer(new MoviesListCellRenderer(0));

frame.add(moviesList);
frame.add(radiosPane, BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < radios.length; i++) {
if (e.getSource().equals(radios[i])) {
moviesList.setCellRenderer(new MoviesListCellRenderer(i));
break;
}
}
}
};

class MoviesListCellRenderer extends DefaultListCellRenderer {
private int attribute;

public MoviesListCellRenderer(int attribute) {
this.attribute = attribute;
}

@Override
public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if (value instanceof Movie) {
Movie movie = (Movie) value;
switch (attribute) {
case 0:
setText(movie.getMovieName());
break;
case 1:
setText(movie.getClassification());
break;
default:
setText(String.valueOf(movie.getPrice()));
break;
}
}
return this;
}
}

class Movie {
private String movieName;
private String classification;
private double price;

public Movie(String movieName, String classification, double price) {
super();
this.movieName = movieName;
this.classification = classification;
this.price = price;
}

public String getMovieName() {
return movieName;
}
public void setMovieName(String movieName) {
this.movieName = movieName;
}
public String getClassification() {
return classification;
}
public void setClassification(String classification) {
this.classification = classification;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
}

正如您所看到的,根据所选的 radio 更改单元格渲染器,此代码仍然可以改进,但应该给您一个想法:

enter image description here

关于java - 对象数组到 JList 和 JList 到 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42862887/

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