Applet Choice不会在每次更改选项(列表)的项目时调用Item状态更改方法为什么?

时间:2015-12-02 08:45:23

标签: java swing applet

代码:每次更改列表浏览器的项目(列表项/选项)时,它都会调用itemStateChanged()并致电repaint()。但是,如果os列表更改了它的项目并不会调用它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 个答案:

答案 0 :(得分:0)

您使用的是哪个版本的Java和操作系统?您的applet在我的笔记本电脑上运行正常(使用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());
    }
}