有 Java 编程相关的问题?

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

java在“paint”方法中将一个选择添加到选择列表中就是在列表中添加多个相同的记录

我创建了一个带有两个选项控件的小程序。 其中一个选项控件是OS名称,另一个是浏览器名称。 我已经为这两个选项控件添加了项目侦听器,以便我们可以检测为每个选项控件选择的选项。 如果在Firefox中选择了浏览器,代码会在OS choice控件中添加另一个OS条目(“Windows 10”)

不知何故,当我选择firefox浏览器时,OS choice控件中添加了多个“Windows 10”条目

谁能帮帮我吗

点击

package p1;

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

public class SingleClick implements ItemListener {

    Applet currentApplet;

    @Override
    public void itemStateChanged(ItemEvent arg0) {
        // TODO Auto-generated method stub

        this.currentApplet.repaint();

    }

    public void appletLink(Applet test) {
        this.currentApplet = test;
    }

}

OsBrowser选择器

package p1;

import java.applet.Applet;
import java.awt.Button;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.Choice;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.GraphicsEnvironment;
import java.awt.Label;
import java.awt.List;
import java.awt.event.ItemListener;

public class OSBrowserSelector extends Applet {

    Choice os;
    Choice browser;

    public void init() {

        os = new Choice();
        browser = new Choice();
        // Set size of the applet window
        this.setSize(500, 500);

        // Add the operating systems
        os.add("XP");
        os.add("Windows 7");
        os.add("Macos");

        //Add the browsers
        browser.add("Chrome");
        browser.add("firefox");
        browser.add("ie");

        //Make the controls visible
        this.add(os);
        this.add(browser);

        // Set the listener for the selection
        //SingleClick class implements the ItemListener interface
        SingleClick l = new SingleClick();
        l.appletLink(this);

        // Add the listener
        os.addItemListener(l);
        browser.addItemListener(l);
    }

    public void start() {

    }

    public void paint(Graphics g) {

        //If the firefox is selected as the browser , add another entry in the os for "Windows 10"
        if (browser.getSelectedItem().equalsIgnoreCase("firefox")) {
            this.os.add("Windows 10");
        }

    }

}

共 (1) 个答案

  1. # 1 楼答案

    public void paint(Graphics g) {
    
        //If the firefox is selected as the browser , add another entry in the os for "Windows 10"
        if (browser.getSelectedItem().equalsIgnoreCase("firefox")) {
            this.os.add("Windows 10");
        }
    
    }
    

    只要JRE认为有必要,就会调用Paint。它可能由(我们的代码)更改小程序中的组件(即添加或删除组件)或更改字段中显示的值触发。它可能是通过最小化和恢复浏览器触发的。将另一个窗口置于浏览器前面,然后将其移开,可能会触发此操作

    最好的方法是init()方法,它只被调用一次


    顺便问一下,你知道下面的方法吗(这使得操作系统“选择器”变得不必要)

    System.getProperty("os.name");
    

    你到底想从这些用户选择中获得什么