gpt4 book ai didi

java - 需要在按下 Jbutton 时显示 ImageIcon

转载 作者:行者123 更新时间:2023-12-01 06:04:03 24 4
gpt4 key购买 nike

当我单击 Jbutton 时,我无法显示图像,测试 sysoutprint 可以工作,但图像却不能。关于做什么的任何想法我都非常迷失!该图像是学校项目的复活节彩蛋,请随意发表评论。我应该使用除 ImageIcon 之外的其他东西吗?另外,如果有任何其他错误,请告诉我!

package GUI;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class mainView{
private static JFrame main; //main frame we add everything too
private static JPanel newGame; //panel for new game
private static JPanel dropDownPanel; //panel for the combobox

private static CardLayout clayout; //cardlayout for new game
private static JComboBox dropDown; //dropdown combobox
ImageIcon eastImg;





public void codeNameView(){
main = new JFrame("CodeNames");
main.setSize(600, 900);
main.setVisible(true);

//dropdown menu for quit and new game
String[] choice = {" " , "NewGame" , "Quit"};
dropDown = new JComboBox(choice);

//below is the panel where we add new game and quit options too
dropDownPanel = new JPanel();
dropDownPanel.setSize(100, 100);
dropDownPanel.add(dropDown);
main.getContentPane().add(dropDownPanel,BorderLayout.NORTH);

//easter egg
JButton easterButt = new JButton("Pass CSE 116");
JLabel eastLbl = new JLabel();
//added button to JLabel
eastLbl.add(easterButt);
try{
String path = "/Users/nabeelkhalid/git/s18semesterproject-b4-zigzag1/src/GUI/MatthewPhoto.jpg";
eastImg = new ImageIcon(path);

}catch(Exception ex){
System.out.print(ex);
}
//added label to Panel
dropDownPanel.add(eastLbl);
eastLbl.addMouseListener(new MouseListener(){

@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
eastLbl.setIcon(eastImg);
System.out.print("test");

}
//Ignore
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub

}

});

//action listener for dropdown combobox
dropDown.addActionListener(new ActionListener(){

/**
* Allows for the user to select New Game or Quit and have the game perform said action
*/
@Override
public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub
JComboBox cb = (JComboBox) e.getSource();
Object selectedOption = dropDown.getSelectedItem();

if (selectedOption.equals("Quit")) {
main.dispose();
}else if(selectedOption.equals("NewGame")){

codeNameView();
System.out.print("yolo");

}
}

});

}


public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
mainView x = new mainView();

// create a instance on mainview to run instead of using static methods

}
});
}

}

最佳答案

主要问题似乎就在这里

try{
String path = "/Users/nabeelkhalid/git/s18semesterproject-b4-zigzag1/src/GUI/MatthewPhoto.jpg";
eastImg = new ImageIcon(path);

}catch(Exception ex){
System.out.print(ex);
}

该路径引用 src 路径上下文中的资源。您永远不应该在代码中引用 src,一旦程序导出(到 Jar 或在不同的计算机上运行),它就不会存在

相反,您应该考虑使用 Class#getResource 来获取对图像的引用,我个人会使用 ImageIO.read 而不是 ImageIcon > 作为个人喜好。

try{
String path = "/GUI/MatthewPhoto.jpg";
eastImg = new ImageIcon(ImageIO.read(this.getClass().getResource(path)));
}catch(Exception ex){
System.out.print(ex);
}

并且,您的下一个问题是,您尝试将 JLabel 添加到 JButton,预计 JButton 没有布局manager AND JButton 已经支持显示图像,因此,您应该做一些更像...

JButton easterButt = new JButton("Pass CSE 116");
//JLabel eastLbl = new JLabel();
//added button to JLabel
//eastLbl.add(easterButt);
try {
String path = "/GUI/MatthewPhoto.jpg";
eastImg = new ImageIcon(ImageIO.read(this.getClass().getResource(path)));

} catch (Exception ex) {
System.out.print(ex);
}
//added label to Panel
dropDownPanel.add(easterButt);
easterButt.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
easterButt.setIcon(eastImg);
}
});

你真的应该仔细看看 How to Use Buttons, Check Boxes, and Radio Buttons

测试代码

这是我用来测试上面建议的解决方案的代码

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class mainView {

private static JFrame main; //main frame we add everything too
private static JPanel newGame; //panel for new game
private static JPanel dropDownPanel; //panel for the combobox

private static CardLayout clayout; //cardlayout for new game
private static JComboBox dropDown; //dropdown combobox
ImageIcon eastImg;

public void codeNameView() {
main = new JFrame("CodeNames");
main.setSize(600, 900);

//dropdown menu for quit and new game
String[] choice = {" ", "NewGame", "Quit"};
dropDown = new JComboBox(choice);

//below is the panel where we add new game and quit options too
dropDownPanel = new JPanel();
dropDownPanel.setSize(100, 100);
dropDownPanel.add(dropDown);
main.getContentPane().add(dropDownPanel, BorderLayout.NORTH);

//easter egg
JButton easterButt = new JButton("Pass CSE 116");
// JLabel eastLbl = new JLabel();
// //added button to JLabel
// eastLbl.add(easterButt);
try {
String path = "/GUI/MatthewPhoto.jpg";
eastImg = new ImageIcon(ImageIO.read(this.getClass().getResource(path)));

} catch (Exception ex) {
System.out.print(ex);
}
//added label to Panel
dropDownPanel.add(easterButt);
easterButt.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
easterButt.setIcon(eastImg);
}
});

//action listener for dropdown combobox
dropDown.addActionListener(new ActionListener() {

/**
* Allows for the user to select New Game or Quit and have the game
* perform said action
*/
@Override
public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub
JComboBox cb = (JComboBox) e.getSource();
Object selectedOption = dropDown.getSelectedItem();

if (selectedOption.equals("Quit")) {
main.dispose();
} else if (selectedOption.equals("NewGame")) {

codeNameView();
System.out.print("yolo");

}
}

});
main.setVisible(true);

}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
System.out.println("Hello");
mainView x = new mainView();
x.codeNameView();
// create a instance on mainview to run instead of using static methods
}
});
}
}

关于java - 需要在按下 Jbutton 时显示 ImageIcon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49836347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com