代码:每次更改列表浏览器的项目(列表项/选项)时,它都会调用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);
}
}
答案 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());
}
}