Я хочу добавить слушатель действия из одного JList в другой JList, и как JList может отображаться без какого-либо текста внутри?
Мне нужна помощь в решении этой проблемы с Javan Swing. У меня есть три JLists в моем графическом интерфейсе. Один из списка содержит меню для ресторана. Предполагается, что кассир нажимает на блюдо в первом JList, а все, что он щелкнул, должно отображаться во втором JList. Как я могу это сделать?
Еще одна проблема заключается в том, что я не могу отобразить JList, ЕСЛИ я не даю ему объект массива для отображения меню, я хочу, чтобы JList также отображался, пока он пуст, как я могу это сделать?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class frame extends JFrame {
private JList menuList ;
private JList orderList;
private JLabel countLabel;
private DefaultListModel listModel;
private Dimension menuListDimension;
public frame (){
JFrame frame = new JFrame ();
frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
buildUI();
}
private void buildUI () {
BoxLayout mainLayout = new BoxLayout(getContentPane(), BoxLayout.X_AXIS);
getContentPane().setLayout(mainLayout);
getContentPane().add(Box.createHorizontalGlue());
getContentPane().add(buildMenuPanel());
getContentPane().add(Box.createHorizontalStrut(0));
getContentPane().add(buildOrderPanel());
getContentPane().add(Box.createHorizontalStrut(10));
getContentPane().add(buildPayPanel());
getContentPane().add(Box.createHorizontalStrut(50));
//getContentPane().add(recieptPanel());
getContentPane().add(Box.createHorizontalGlue());
}
private JPanel buildMenuPanel (){
JPanel menuPanel = new JPanel();
BoxLayout menuLayout = new BoxLayout(menuPanel, BoxLayout.Y_AXIS);
menuPanel.setLayout(menuLayout);
getContentPane().add(menuPanel);
//menuList.addActionListener(
//new ActionListener()
{
//public void actionPerformed(ActionEvent e)
//{
//helloPressed();
//}
//}
listModel = new DefaultListModel();
listModel.addElement("ghjghj");
listModel.addElement("John Smith");
listModel.addElement("Kathy Green");
listModel.addElement("ghjghj");
listModel.addElement("John Smith");
listModel.addElement("Kathy Green");
listModel.addElement("ghjghj");
listModel.addElement("John Smith");
listModel.addElement("Kathy Green");
listModel.addElement("ghjghj");
listModel.addElement("John Smith");
listModel.addElement("Kathy Green");
menuList = new JList(listModel); //data has type Object[]
menuList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
menuList.setLayoutOrientation(JList.VERTICAL);
menuList.setVisibleRowCount(-1);
menuList.setFixedCellWidth(200);
JScrollPane listScroller = new JScrollPane(menuList);
listScroller.setPreferredSize(new Dimension(7, 250));
menuPanel.add(menuList);
menuPanel.add(Box.createVerticalStrut(5));
return menuPanel;
}
}
private JPanel buildOrderPanel (){
JPanel orderPanel = new JPanel();
BoxLayout orderLayout = new BoxLayout(orderPanel, BoxLayout.Y_AXIS);
orderPanel.setLayout(orderLayout);
getContentPane().add(orderPanel);
//menuList.addActionListener(
//new ActionListener()
//{
//public void actionPerformed(ActionEvent e)
//{
//helloPressed();
//}
orderList = new JList(listModel); //data has type Object[]
orderList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
orderList.setLayoutOrientation(JList.HORIZONTAL_WRAP);
orderList.setVisibleRowCount(-1);
orderList.setFixedCellWidth(200);
JScrollPane listScroller = new JScrollPane(orderList);
listScroller.setPreferredSize(new Dimension(250, 80));
//orderList.setVisible(true);
orderPanel.add(orderList);
//orderPanel.setVisible(true);
orderPanel.add(Box.createVerticalStrut(5));
return orderPanel;
}
private JPanel buildPayPanel (){
JPanel payPanel = new JPanel();
BoxLayout doneLayout = new BoxLayout(payPanel, BoxLayout.Y_AXIS);
payPanel.setLayout(doneLayout);
getContentPane().add(payPanel);
payPanel.add(Box.createVerticalStrut(5));
listModel = new DefaultListModel();
listModel.addElement("ghjghj");
listModel.addElement("John Smith");
listModel.addElement("Kathy Green");
listModel.addElement("ghjghj");
listModel.addElement("John Smith");
listModel.addElement("Kathy Green");
listModel.addElement("ghjghj");
listModel.addElement("John Smith");
listModel.addElement("Kathy Green");
listModel.addElement("ghjghj");
listModel.addElement("John Smith");
listModel.addElement("Kathy Green");
menuListDimension = new Dimension (10,10);
menuList = new JList(listModel); //data has type Object[]
menuList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
menuList.setLayoutOrientation(JList.VERTICAL);
menuList.setVisibleRowCount(50);
menuList.setFixedCellWidth(300);
menuList.setDragEnabled(true);
menuList.setMinimumSize(menuListDimension);
JScrollPane listScroller = new JScrollPane(menuList);
listScroller.setPreferredSize(new Dimension(80, 250));
payPanel.add(menuList);
payPanel.add(Box.createVerticalStrut(5));
getContentPane().add(payPanel);
JButton payButton = new JButton ("Pay");
JButton cancelButton = new JButton ("Cancel");
//menuList.addActionListener(
//new ActionListener()
//{
//public void actionPerformed(ActionEvent e)
//{
//helloPressed();
//}
payPanel.add(payButton);
payPanel.add(cancelButton);
return payPanel;
}
}
2 ответа
пустой
JList : JList l = new JList()
;Добавить список выбора Слушатель
firstJList.addSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { //add items to your other JList } });
Я закомментировал много кода. Я должен сказать это, пожалуйста, не поймите меня неправильно. Я не хочу оскорблять ваши навыки или что-то в этом роде, но этот ваш код - один уродливый сын... кода, который я видел очень давно:)
@Swaranga Sarma предложения полезны. И, как указано этим пользователем, JList будет отображаться, даже если он пуст. Вы почти все сделали правильно, вы просто неправильно добавили список. Вы были на правильном пути, думали, вы использовали JScrollPane's, но тогда вы должны добавить их на панель, а не в список.
Я решил использовать прослушиватель мыши вместо предложенного @Swaranga Sarma слушателя, потому что при этом у вас не возникнет проблем, если дважды щелкнуть один и тот же элемент и добавить его только один раз, как если бы вы использовали прослушиватель выбора как это работает только при смене предмета.
package test.components;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class frame extends JFrame
{
private JList menuList;
private JList menuList2;
private JList orderList;
private JLabel countLabel;
// private DefaultListModel listModel;
private Dimension menuListDimension;
public static void main(String[] args)
{
JFrame f = new frame();
f.setSize(800, 600);
f.setVisible(true);
}
public frame()
{
//JFrame frame = new JFrame();
//frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
setDefaultCloseOperation(EXIT_ON_CLOSE);
buildUI();
}
private void buildUI()
{
//BoxLayout mainLayout = new BoxLayout(getContentPane(), BoxLayout.X_AXIS);
GridLayout mainLayout = new GridLayout(1, 5);
getContentPane().setLayout(mainLayout);
// getContentPane().add(Box.createHorizontalGlue());
getContentPane().add(buildMenuPanel());
// getContentPane().add(Box.createHorizontalStrut(0));
getContentPane().add(buildOrderPanel());
// getContentPane().add(Box.createHorizontalStrut(10));
getContentPane().add(buildPayPanel());
// getContentPane().add(Box.createHorizontalStrut(50));
// getContentPane().add(recieptPanel());
// getContentPane().add(Box.createHorizontalGlue());
}
private JPanel buildMenuPanel()
{
JPanel menuPanel = new JPanel();
BoxLayout menuLayout = new BoxLayout(menuPanel, BoxLayout.Y_AXIS);
menuPanel.setLayout(menuLayout);
getContentPane().add(menuPanel);
final DefaultListModel listModel = new DefaultListModel();
listModel.addElement("ghjghj");
listModel.addElement("John Smith");
listModel.addElement("Kathy Green");
listModel.addElement("ghjghj");
listModel.addElement("John Smith");
listModel.addElement("Kathy Green");
listModel.addElement("ghjghj");
listModel.addElement("John Smith");
listModel.addElement("Kathy Green");
listModel.addElement("ghjghj");
listModel.addElement("John Smith");
listModel.addElement("Kathy Green");
menuList = new JList(listModel); //data has type Object[]
menuList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
menuList.setLayoutOrientation(JList.VERTICAL);
menuList.setVisibleRowCount(50);
menuList.setFixedCellWidth(150);
menuList.setBackground(Color.GREEN);
menuList.addMouseListener(new MouseAdapter()
{
@Override
public void mousePressed(MouseEvent e)
{
Object selected = menuList.getSelectedValue();
System.out.println("menuList.addMouseListener.mousePressed selected=" + selected);
DefaultListModel dm = (DefaultListModel) orderList.getModel();
dm.add(orderList.getModel().getSize(), selected);
}
});
JScrollPane listScroller = new JScrollPane(menuList);
listScroller.setPreferredSize(new Dimension(100, 250));
menuPanel.add(listScroller);
// menuPanel.add(Box.createVerticalStrut(5));
return menuPanel;
}
private JPanel buildOrderPanel()
{
JPanel orderPanel = new JPanel();
BoxLayout orderLayout = new BoxLayout(orderPanel, BoxLayout.Y_AXIS);
orderPanel.setLayout(orderLayout);
orderList = new JList(new DefaultListModel());//(listModel); //data has type Object[]
orderList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
orderList.setLayoutOrientation(JList.HORIZONTAL_WRAP);
orderList.setVisibleRowCount(50);
orderList.setFixedCellWidth(150);
orderList.setBackground(Color.RED);
JScrollPane listScroller = new JScrollPane(orderList);
listScroller.setPreferredSize(new Dimension(100, 250));
//orderList.setVisible(true);
orderPanel.add(listScroller);
//orderPanel.setVisible(true);
// getContentPane().add(orderPanel);
// orderPanel.add(Box.createVerticalStrut(5));
return orderPanel;
}
private JPanel buildPayPanel()
{
JPanel payPanel = new JPanel();
BoxLayout doneLayout = new BoxLayout(payPanel, BoxLayout.Y_AXIS);
payPanel.setLayout(doneLayout);
// getContentPane().add(payPanel);
// payPanel.add(Box.createVerticalStrut(5));
DefaultListModel listModel = new DefaultListModel();
listModel.addElement("ghjghj");
listModel.addElement("John Smith");
listModel.addElement("Kathy Green");
listModel.addElement("ghjghj");
listModel.addElement("John Smith");
listModel.addElement("Kathy Green");
listModel.addElement("ghjghj");
listModel.addElement("John Smith");
listModel.addElement("Kathy Green");
listModel.addElement("ghjghj");
listModel.addElement("John Smith");
listModel.addElement("Kathy Green");
menuListDimension = new Dimension(10, 10);
menuList2 = new JList(listModel); //data has type Object[]
menuList2.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
menuList2.setLayoutOrientation(JList.VERTICAL);
menuList2.setVisibleRowCount(50);
menuList2.setFixedCellWidth(150);
menuList2.setDragEnabled(true);
menuList2.setBackground(Color.BLUE);
// menuList2.setMinimumSize(menuListDimension);
JScrollPane listScroller = new JScrollPane(menuList2);
listScroller.setPreferredSize(new Dimension(100, 250));
payPanel.add(listScroller);
// payPanel.add(Box.createVerticalStrut(5));
// getContentPane().add(payPanel);
JButton payButton = new JButton("Pay");
JButton cancelButton = new JButton("Cancel");
payPanel.add(payButton);
payPanel.add(cancelButton);
return payPanel;
}
}
Пожалуйста, в следующий раз очистите код больше:) Мне действительно интересно, что заставило меня пройти через это. Может быть, потому что однажды у меня была похожая проблема, давным-давно, и мне было легко с ней справиться снова?:)
Удачи, Боро.