Java 启用/禁用JButtons
我正在开发一个小型照片编辑应用程序,希望在用户加载图像之前禁用JButtons,此时我希望按钮处于启用状态(可单击)。我的想法是添加一个布尔imageFound和一个图像检查器方法。如果布尔值为false,则禁用按钮,如果为true,则启用按钮(在load image actionPerformed方法中将布尔值设置为true)。我遇到的问题是,当运行应用程序时,按钮被禁用,但当我加载图像时,它们仍然会被禁用。我不知道我是否缺少任何代码来重新检查图像是否可用,从而启用按钮(在ofc运行时)。谢谢你的帮助Java 启用/禁用JButtons,java,swing,jbutton,Java,Swing,Jbutton,我正在开发一个小型照片编辑应用程序,希望在用户加载图像之前禁用JButtons,此时我希望按钮处于启用状态(可单击)。我的想法是添加一个布尔imageFound和一个图像检查器方法。如果布尔值为false,则禁用按钮,如果为true,则启用按钮(在load image actionPerformed方法中将布尔值设置为true)。我遇到的问题是,当运行应用程序时,按钮被禁用,但当我加载图像时,它们仍然会被禁用。我不知道我是否缺少任何代码来重新检查图像是否可用,从而启用按钮(在ofc运行时)。谢谢
...BufferedImage effects = null;
boolean bmpFound = false;
public GUI()
{
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.initComponents();
this.bmpChecker();
this.addListeners();
this.setTitle("PicTweak");
this.setSize(900, 600);
this.setVisible(true);
}
...else if(e.getSource() == loadItem)
{
try
{
imagePath = DialogIO.displayOpenDialog();
effects = ImageInOut.loadImage(imagePath);
imageHolder.setIcon(new ImageIcon(effects));
bmpFound = true;
}
....public void bmpChecker()
{
if(bmpFound)
{
grayScale.setEnabled(true);
blur.setEnabled(true);
reset.setEnabled(true);
brightDark.setEnabled(true);
horFlip.setEnabled(true);
verFlip.setEnabled(true);
verHorFlip.setEnabled(true);
}
else
{
grayScale.setEnabled(false);
blur.setEnabled(false);
reset.setEnabled(false);
brightDark.setEnabled(false);
horFlip.setEnabled(false);
verFlip.setEnabled(false);
verHorFlip.setEnabled(false);
}
}
加载/卸载图像时,请稍后调用
bmpChecker()
,即
...
try
{
imagePath = DialogIO.displayOpenDialog();
effects = ImageInOut.loadImage(imagePath);
imageHolder.setIcon(new ImageIcon(effects));
bmpFound = true;
bmpChecker();
}
...
更好的替代方法是为图像加载添加侦听器,也就是说,对于每个需要相应更新其状态的控件或控件组,您应该注册一个侦听器,每当加载或卸载图像时都会收到通知。然后,侦听器可以触发相应控件的更新
比如:
class ImageEvent {
private boolean imageLoaded; //plus getter/setter and maybe initialized in constructor
}
interface ImageListener {
void imageChanged(ImageEvent e);
}
...
List<ImageListener> listeners;
...
try
{
imagePath = DialogIO.displayOpenDialog();
effects = ImageInOut.loadImage(imagePath);
imageHolder.setIcon(new ImageIcon(effects));
bmpFound = true;
ImageEvent imgageEvent = new ImageEvent();
imageEvent.setImageLoaded(true);
for( ImageListener l : listeners ) {
l.imageChanged(imageEvent);
}
}
...
加载/卸载图像时,请稍后调用
bmpChecker()
,即
...
try
{
imagePath = DialogIO.displayOpenDialog();
effects = ImageInOut.loadImage(imagePath);
imageHolder.setIcon(new ImageIcon(effects));
bmpFound = true;
bmpChecker();
}
...
更好的替代方法是为图像加载添加侦听器,也就是说,对于每个需要相应更新其状态的控件或控件组,您应该注册一个侦听器,每当加载或卸载图像时都会收到通知。然后,侦听器可以触发相应控件的更新
比如:
class ImageEvent {
private boolean imageLoaded; //plus getter/setter and maybe initialized in constructor
}
interface ImageListener {
void imageChanged(ImageEvent e);
}
...
List<ImageListener> listeners;
...
try
{
imagePath = DialogIO.displayOpenDialog();
effects = ImageInOut.loadImage(imagePath);
imageHolder.setIcon(new ImageIcon(effects));
bmpFound = true;
ImageEvent imgageEvent = new ImageEvent();
imageEvent.setImageLoaded(true);
for( ImageListener l : listeners ) {
l.imageChanged(imageEvent);
}
}
...
展示一些代码怎么样?一些代码片段会很有帮助。-1“一些代码”或“代码片段”+1.展示一些代码怎么样?一些代码片段会有帮助。-1“一些代码”或“代码片段”+1.非常感谢,非常感谢!:D非常感谢,非常感谢!:D