当前位置: 首页 > 知识库问答 >
问题:

编写程序,使用Java AWT组件按选择顺序显示列表中的选定项

宰父衡
2023-03-14

项目2、项目4、项目1。

然后我们需要显示选择选项的顺序。

目前,我已经创建了一段代码,部分满足了这一要求,但输出非常奇怪,很难解释······

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
/*<applet code = "ListDemo" width = "500" height = "500"></applet>*/
public class ListDemo extends Applet implements ItemListener{
    List l1;
    String msg;
    int selected = 0;
    int ordered[] = new int[6];
    public void init(){
        l1 = new List(3, true);
        l1.add("Java");         l1.add("Advance Java");
        l1.add("OS");           l1.add("Python");
        l1.add("JavaScript");   l1.add("Data Structures");
        add(l1);
        l1.addItemListener(this);
        for(int i = 0; i < ordered.length; ordered[i++] = -1);
    }
    public void itemStateChanged(ItemEvent ie){
        repaint();
    }
    private void removeElement(int index){
        for(int i = index; i < selected; i++){
            ordered[i] = ordered[i++];
        }
    }
    public void paint(Graphics g){
        msg = "The Selected Subjects are: ";
        int indexes[] = l1.getSelectedIndexes();
        for(int i = 0; i < indexes.length; i++){
            int j = 0;
            for(; j < ordered.length; j++){
                if(ordered[j] == indexes[i]){  break;   }
            }
            if(j == ordered.length){
                ordered[selected++] = indexes[i];
            }
        }
        for(int i = 0; i < selected; i++){
            int j = 0;
            for(; j < indexes.length; j++){
                if(ordered[i] == indexes[j]){  break;   }
            }
            if(j == indexes.length){
                selected--;
                removeElement(i);
            }
        }
        for(int i = 0; i < selected; System.out.println(l1.getItem(ordered[i++])));
        System.out.println("\n\n");
        for(int i = 0; i < selected; msg += l1.getItem(ordered[i++]) + " ");
        g.drawString(msg, 10, 200);
    }
}

我是一个程序员新手,如果我没有遵守某些约定,或者变量的命名不是很好,或者我犯了任何应该被注意到的愚蠢错误,请对我放松一点。任何形式的输入都是赞赏的!

共有1个答案

羊舌迪
2023-03-14

小程序已经死了--我们不会支持它们,是时候让你的学校走出黑暗时代了。

你会很幸运找到任何人谁有很多经验与AWT,甚至Swing。是时候转移到JavaFX了。

无论如何,这将完成您试图完成的任务,但您必须弄清楚它是如何工作的,并将其重新应用到您的解决方案

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private JList<String> lstItems;
        private List<String> selectedItems = new ArrayList<>(25);

        public TestPane() {
            setLayout(new BorderLayout());

            DefaultListModel<String> model = new DefaultListModel<>();
            model.addElement("Java");
            model.addElement("Advance Java");
            model.addElement("OS");
            model.addElement("Python");
            model.addElement("JavaScript");
            model.addElement("Data Structures");

            lstItems = new JList<>(model);

            add(new JScrollPane(lstItems));

            lstItems.addMouseListener(new MouseAdapter() {                
                @Override
                public void mouseClicked(MouseEvent e) {
                    int index = lstItems.locationToIndex(e.getPoint());
                    if (index >= 0) {
                        String value = lstItems.getModel().getElementAt(index);
                        List<String> selectedValues = lstItems.getSelectedValuesList();

                        List<String> temp = new ArrayList<>(selectedItems);
                        temp.removeAll(selectedValues);
                        selectedItems.removeAll(temp);

                        if (selectedValues.contains(value)) {
                            selectedItems.add(value);
                        }
                    }
                }
            });

            JButton btn = new JButton("Order");
            btn.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    JOptionPane.showMessageDialog(TestPane.this, selectedItems);
                }
            });
            add(btn, BorderLayout.SOUTH);
        }

    }
}
 类似资料:
  • 问题内容: 我有类似的东西 如果我只是这样做,它将以ID升序返回行。有没有一种方法可以按照IN语句中给出的顺序取回行? 问题答案: 您应该使用“ ORDER BY FIELD”。因此,例如:

  • 问题内容: 我认为使用某种顺序才有意义。我想做的是在视图中包括该子句,以便该视图上的所有s都可以忽略它。但是,我担心该订单不一定会延续到,因为它没有指定订单。 是否存在一种情况,即视图指定的顺序不会反映在该视图上的select结果中(该视图中的order by子句除外)? 问题答案: 您不能指望没有显式子句的任何查询中的行顺序。如果查询有序视图,但没有包括子句,则如果它们的顺序正确,请感到惊喜,并

  • 我知道有很多关于这个的话题,但是我找不到解决我的问题的方法。我知道如果我在hibernate中使用“不同”和“order by”,order by中的列必须在选择子句中。其他文章只是说该列必须在选择中,但是我还没有找到一个示例来实现这一点。 这是我的班级: 我的(不工作)查询: 例如,如果我按标题排序,它是有效的。我试图在select子句中设置学名: 但是然后hibernate抱怨查询的返回类型不

  • 在python上使用xslt 1.0,我试图在指定顺序时选择几个项目: 如果我使用一个带有一个大的或在一起列表的for-each,我可以得到我想要的项目,但是只能按照上面xml源文档的原始顺序。 这就产生了: 但我想让它输出: 我认为使用xsl:apply模板可能是一种方法,但即使是这个简单的示例,我也无法让它工作。XSLT1.0中按特定顺序选择元素的最佳方法是什么?

  • 本文向大家介绍使用MySQL仅按ASC顺序显示记录列表,包括了使用MySQL仅按ASC顺序显示记录列表的使用技巧和注意事项,需要的朋友参考一下 要以特定顺序显示记录列表,您需要设置条件并使用ORDER BY。为此,请使用ORDER BY CASE语句。让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 这是查询以ASC顺序显示特定