有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java小程序选项不会在每次更改选项项(列表)时调用项状态更改方法。为什么?

代码:每次我更改列表浏览器的项(列表项/选项)时,它都会调用itemStateChanged()repaint()。但这在操作系统列表的情况下是不一样的,它不调用它的项itemStateChanged()不知道为什么,但是lister附加到这两个项上

 import java.applet.*;
        import java.awt.*;
        import java.awt.event.ItemEvent;
        import java.awt.event.ItemListener;

    public class AppletList extends Applet implements ItemListener {
        String msg = "";
        Choice browser, os;

        public void init() {
            setForeground(Color.red);
            browser=new Choice();
            os=new Choice();

            browser.addItem("Explorer");
            browser.addItem("Chrome");
            browser.addItem("Mozilla");

            os.addItem("Windows");
            os.addItem("Mac");

            add(browser);
            add(os);
            os.addItemListener(this);
            browser.addItemListener(this);
        }

        @Override
        public void itemStateChanged(ItemEvent e) {
            repaint();

        }
        public void paint(Graphics g){
            msg="Browser : ";
            msg+=browser.getSelectedItem();
            g.drawString(msg, 6,120);

            msg="OS :+ ";
            msg+=os.getSelectedItem();
            g.drawString(msg, 6, 140);
        }

    }

共 (1) 个答案

  1. # 1 楼答案

    您使用的是哪个版本的Java和操作系统?你的小程序在我的笔记本电脑上运行良好(使用Java 8和Windows 8.1)

    按照MadProgrammer的(一些)建议,切换到Swing并使用JLabel,您可以尝试一下这段代码(我同意使用Swing和常规组件更好,也许它甚至可以解决您机器上的问题):

    import java.applet.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.border.*;
    
    public class AppletListSwing extends Applet implements ItemListener {
        private JComboBox<String> browserComboBox;
        private JComboBox<String> osComboBox;
        private JLabel browserLabel;
        private JLabel osLabel;
    
        public void init() {
            setLayout(new BorderLayout());
    
            // Create the control panel.
            final JPanel controlPanel = new JPanel();
    
            browserComboBox = new JComboBox<>(new String[]{"Explorer", "Chrome", "Mozilla"});
            osComboBox = new JComboBox<>(new String[]{"Windows", "Mac"});
            browserComboBox.setForeground(Color.RED);
            osComboBox.setForeground(Color.RED);
    
            controlPanel.add(browserComboBox);
            controlPanel.add(osComboBox);
            add(controlPanel, BorderLayout.NORTH);
    
            browserComboBox.addItemListener(this);
            osComboBox.addItemListener(this);
    
            // Create the display panel.
            final JPanel displayPanel = new JPanel();
            displayPanel.setBorder(new EmptyBorder(28, 28, 28, 28));
            displayPanel.setLayout(new BoxLayout(displayPanel, BoxLayout.PAGE_AXIS));
    
            browserLabel = new JLabel();
            osLabel = new JLabel();
            browserLabel.setForeground(Color.RED);
            osLabel.setForeground(Color.RED);
    
            displayPanel.add(Box.createRigidArea(new Dimension(0, 42)));
            displayPanel.add(browserLabel);
            displayPanel.add(Box.createRigidArea(new Dimension(0, 6)));
            displayPanel.add(osLabel);
    
            add(displayPanel, BorderLayout.CENTER);
    
            updateDisplayPanel();
        }
    
        @Override
        public void itemStateChanged(ItemEvent e) {
            updateDisplayPanel();
        }
    
        private void updateDisplayPanel() {
            browserLabel.setText("Browser : " + browserComboBox.getSelectedItem());
            osLabel.setText("OS :+ " + osComboBox.getSelectedItem());
        }
    }