Java 在JPanel中添加ActionListener
我有一个有两个按钮的JPanel。其目的是,只要我按下第一个Jbutton(“您是否有预测值…”),就会弹出另一个JPanel,我可以看到其他创建的Jbutton。问题是,当我运行代码时,我可以看到第一个面板,但当我单击按钮时,什么也没有发生。如果你能帮助我,那就太好了Java 在JPanel中添加ActionListener,java,swing,jpanel,jbutton,Java,Swing,Jpanel,Jbutton,我有一个有两个按钮的JPanel。其目的是,只要我按下第一个Jbutton(“您是否有预测值…”),就会弹出另一个JPanel,我可以看到其他创建的Jbutton。问题是,当我运行代码时,我可以看到第一个面板,但当我单击按钮时,什么也没有发生。如果你能帮助我,那就太好了 public class Main { private static Component frame; private static JFileChooser inputFile; private st
public class Main {
private static Component frame;
private static JFileChooser inputFile;
private static JFileChooser outputFile;
private static String fullpath;
private static String fullpath1;
private static String fullpath2;
private static String fullpath3;
public static void main(String args[]) throws FileNotFoundException, IOException {
try {
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(5, 5, 5, 5);
JButton nextPanel = new JButton("Do you have predicted values or residual errors?");
JButton inputButton = new JButton("Browse predictor dataset");
JPanel myPanel = new JPanel(new GridBagLayout()); //new panel
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.gridx = 0;
gbc.gridy = 1;
gbc.anchor = (0 == 0) ? GridBagConstraints.WEST : GridBagConstraints.EAST;
gbc.fill = (0 == 0) ? GridBagConstraints.BOTH
: GridBagConstraints.HORIZONTAL;
gbc.weightx = (0 == 0) ? 0.1 : 0.1;
gbc.weighty = 1.0;
myPanel.add(nextPanel, gbc);
final JPanel myPanel1 = new JPanel(new GridBagLayout());
myPanel.add(myPanel1);
nextPanel.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
GridBagConstraints gbc1 = new GridBagConstraints();
gbc1.insets = new Insets(5, 5, 5, 5);
JButton errorButton = new JButton("Browse residual error associated to each instance");
JButton predictedButton = new JButton("Browse predicted value associated to each instance");
gbc1.gridwidth = 1;
gbc1.gridheight = 1;
gbc1.gridx = 0;
gbc1.gridy = 1;
gbc1.anchor = (0 == 0) ? GridBagConstraints.WEST : GridBagConstraints.EAST;
gbc1.fill = (0 == 0) ? GridBagConstraints.BOTH
: GridBagConstraints.HORIZONTAL;
gbc1.weightx = (0 == 0) ? 0.1 : 0.1;
gbc1.weighty = 1.0;
myPanel1.add(errorButton, gbc1);
}
});
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.gridx = 0;
gbc.gridy = 9;
gbc.anchor = (0 == 0) ? GridBagConstraints.WEST : GridBagConstraints.EAST;
gbc.fill = (0 == 0) ? GridBagConstraints.BOTH
: GridBagConstraints.HORIZONTAL;
gbc.weightx = (0 == 0) ? 0.1 : 0.1;
gbc.weighty = 1.0;
myPanel.add(inputButton, gbc);
inputButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser inputFile = new JFileChooser();
inputFile.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
if (inputFile.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
File file1 = inputFile.getSelectedFile();
String fullpathTemp = (String) file1.getAbsolutePath();
fullpath = fullpathTemp;
}
}
});
int result = JOptionPane.showConfirmDialog(null, myPanel, "CPM Program", JOptionPane.OK_CANCEL_OPTION);
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
} finally {
}
}
}
你有两个问题。首先,您应该使用JDialog框架来显示mypanel1——我认为您不能只显示JPanel本身 因此,当单击该选项时,创建一个新的JDialog并向其中添加第二个JPanel。确保在JDialog框上调用setVisible方法 现在,您将遇到另一个问题。您创建的第一个框架(showConfirm消息)将获得所有actionEvents,而您的JDialog将不会获得任何actionEvents。而且,由于传入null作为JOption框的父帧,新的JDialog将无法“requestFocus”,因此不会接收任何actionEvents
因此,您需要重构代码,以确保生成的任何新JDialogBox都可以请求焦点。据我所知,您永远不会将
myPanel1
添加到myPanel
您可能还想看一看,谢谢您的评论。你是对的。我编辑了代码,但仍然存在问题。@Vahid:是的,问题是您仍然没有使用CardLayout。如果你在没有遵循这些建议的情况下声称自己“仍然存在问题”,那就很难提供帮助。