Java 每次单击JList,重新绘制JPanel
每次单击JList项目时,我都需要清除并刷新当前面板并加载另一个面板,该面板通过“populateWithButtons()”方法返回。temp是一个int变量,用于存储在JList上单击的内容。如何纠正以下问题Java 每次单击JList,重新绘制JPanel,java,swing,jpanel,jlist,mouse-listeners,Java,Swing,Jpanel,Jlist,Mouse Listeners,每次单击JList项目时,我都需要清除并刷新当前面板并加载另一个面板,该面板通过“populateWithButtons()”方法返回。temp是一个int变量,用于存储在JList上单击的内容。如何纠正以下问题 list_1.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent evt) {
list_1.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent evt) {
//refresh + populate JPanel
Food food = new Food();
JPanel panel2 = new JPanel();
JPanel pane11 = new JPanel();
panel2.add(panel1);
panel1.validate();
panel1.repaint();
panel1.setBounds(153, 74, 281, 269);
panel1.add(food.populateWithButtons(temp));
contentPane.add(panel2);
}
添加到contentPane
后,移动validate()
和repaint()
,此时将重新绘制
ListSelectionListener
(ListSelectionModel
到SINGLE
…)进行选择,以切换准备好的卡(JPanel
,带有某些内容)导入java.awt.BorderLayout;
导入java.awt.CardLayout;
导入java.awt.Color;
导入java.awt.Dimension;
导入java.util.Vector;
导入javax.swing.JFrame;
导入javax.swing.JList;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.ListSelectionModel;
导入javax.swing.SwingUtilities;
导入javax.swing.event.ListSelectionEvent;
导入javax.swing.event.ListSelectionListener;
公共类CardlayoutTest{
私有颜色[]颜色=新颜色[]{Color.BLACK,Color.RED,Color.GREEN,Color.BLUE};
私有JFrame=新JFrame();
私有JList list=新JList();
private JPanel panel=new JPanel();
私人卡布局卡=新卡布局();
公共CardlayoutTest(){
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
面板设置布局(卡片);
向量项=新向量();
对于(int x=0;x
首先将all设置为实例变量,而不是匿名本地变量。。面板。添加(面板)它是什么意思?。pupulateWithButtons(temp)返回什么?。请确保问题是可以理解的。对不起,我刚刚编辑了我的问题。为什么要创建一个新的JPanel panel 2
并调用removeALL()
?一开始它是空的。你问了很多问题,但很少接受和回答。该是你学会正确使用论坛并在得到帮助时接受答案的时候了。我很抱歉,但它不起作用。我知道我直接在GUI上工作。请你提供一个简短的例子好吗?你已经听取了你的建议并使用了ListSelectionListener。如何实现您的第三个建议?JList中的项表示卡(JPanel),反之亦然。您有10个单独的视图,为每个视图创建JPanel,将此JPanel作为卡放入CardLayout,它具有CardLayout的字符串描述,然后将相同的字符串作为新项放入JList,ListSelectionListener返回字符串,将此字符串值作为CardLayout的参数传递,链接教程显示JComboBox,这与JList相同,似乎很复杂。我只想让JPanel刷新自己。谢谢你。无论如何,我感谢你的建议,这在此时可能不适用。我想这是几分钟的工作,嗯,你会扼杀我无尽的懒散,尽可能简单地等待
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class CardlayoutTest {
private Color[] colors = new Color[]{Color.BLACK, Color.RED, Color.GREEN, Color.BLUE};
private JFrame frame = new JFrame();
private JList list = new JList();
private JPanel panel = new JPanel();
private CardLayout card = new CardLayout();
public CardlayoutTest() {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel.setLayout(card);
Vector<String> items = new Vector<String>();
for (int x = 0; x < colors.length; x++) {
JPanel pnl = new JPanel(new BorderLayout());
pnl.setBackground(colors[x]);
panel.add(pnl, colors[x].toString());
items.add(colors[x].toString());
}
list = new JList(items);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
String card = list.getSelectedValue().toString();
CardLayout cL = (CardLayout) (panel.getLayout());
cL.show(panel, card);
}
}
});
frame.add(new JScrollPane(list), BorderLayout.WEST);
frame.add(panel);
frame.setPreferredSize(new Dimension(400, 150));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new CardlayoutTest();
}
});
}
}