我正在使用动作侦听器来更改链接到组合框的JLabel图标。我得到了它的工作,但在添加一些代码打开一个对话框后,它停止调用动作监听器(IDK如何破坏它)。我从我保存的备份中再次尝试了但无法使其工作。
此时它会加载默认图标,但更改组合框中的值不会像以前那样调用侦听器。
这是我的程序的样子,它应该在这里显示德国国旗: demo_Image
这是我的代码:
package LTranslator;
import java.awt.event.ActionEvent;
import javax.swing.*;
public class LangTranslator extends javax.swing.JFrame {
public LangTranslator() {
initComponents();
}
/**Calls the action listener*/
public void actionPerformed(ActionEvent e) {
JComboBox cb = (JComboBox)e.getSource();
String flagImage = (String)cb.getSelectedItem();
updateLabel(flagImage);
}
/**Changes the icon */
protected void updateLabel(String name) {
ImageIcon icon = createImageIcon("/images/" + name + ".png");
imgOne.setIcon(icon);
imgOne.setToolTipText("A drawing of a " + name.toLowerCase());
if (icon != null) {
imgOne.setText(null);
} else {
imgOne.setText("Image not found");
}
}
/** Returns an ImageIcon, or null if the path was invalid. */
protected static ImageIcon createImageIcon(String path) {
java.net.URL imgURL = LangTranslator.class.getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
private void initComponents() {
comboOne = new javax.swing.JComboBox<>();
btnGetLanguage = new javax.swing.JButton();
btnTranslate = new javax.swing.JButton();
txtGetLanguage = new javax.swing.JTextField();
cbxOne = new javax.swing.JCheckBox();
cbxTwo = new javax.swing.JCheckBox();
cbxThree = new javax.swing.JCheckBox();
cbxFour = new javax.swing.JCheckBox();
imgOne = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
taOne = new javax.swing.JTextArea();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Translator");
comboOne.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Japanese", "Swedish", "German", "Dutch" }));
comboOne.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
comboOneActionPerformed(evt);
}
});
btnGetLanguage.setText("Get Language");
btnGetLanguage.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnGetLanguageActionPerformed(evt);
}
});
btnTranslate.setText("Translate");
btnTranslate.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnTranslateActionPerformed(evt);
}
});
cbxOne.setText("Hello World");
cbxTwo.setText("How are you?");
cbxThree.setText("What day is it today?");
cbxFour.setText("Goodbye");
imgOne.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Japanese.png"))); // NOI18N
taOne.setColumns(20);
taOne.setRows(5);
taOne.setEnabled(false);
jScrollPane1.setViewportView(taOne);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(46, 46, 46)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(comboOne, javax.swing.GroupLayout.PREFERRED_SIZE, 123, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(35, 35, 35)
.addComponent(btnGetLanguage)
.addGap(43, 43, 43)
.addComponent(txtGetLanguage))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(cbxFour)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(cbxTwo)
.addComponent(cbxOne)
.addComponent(cbxThree))
.addGap(31, 31, 31)
.addComponent(btnTranslate, javax.swing.GroupLayout.PREFERRED_SIZE, 86, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(18, 18, 18)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 243, Short.MAX_VALUE)))
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addGap(140, 140, 140)
.addComponent(imgOne)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(35, 35, 35)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(comboOne, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnGetLanguage)
.addComponent(txtGetLanguage, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(imgOne)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 25, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addGroup(layout.createSequentialGroup()
.addComponent(cbxOne)
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(cbxTwo)
.addComponent(btnTranslate, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addComponent(cbxThree)
.addGap(17, 17, 17)
.addComponent(cbxFour))
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 152, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(17, 17, 17))
);
pack();
}// </editor-fold>
答案 0 :(得分:1)
将ActionListener添加到调用comboOneActionPerformed(evt)
的ComboBox中,但触发更改的方法名为actionPerformed(ActionEvent e)
。改变它,它应该工作。我想知道这确实是编译的。
您还可以实现ActionListener,然后添加ActionListener,如下所示:comboOne.addActionListener(this);