想要通过单击按钮将图片添加到 JPanel
Want to add pictures to a JPanel on click of a Button
我必须创建一个程序,在该程序中我将在对话框中显示一些选项供用户选择。
根据用户选择的选项,我必须在另一个之前为空的对话框中显示该图片。
示例:
- 对话框 "one" 和 "two" 都对用户可见。对话框 "one" 上面显示了很多按钮。其中 Dialog "two" 为空。
- 用户单击对话框 "one" 上可用的按钮 A,然后我必须在对话框 "two" 上显示该图片。
- 用户单击对话框 "one" 上可用的不同按钮 B,然后我必须在对话框 "two" 上显示该图片以及旧图片。
是否可以在不创建新对话框 "two" 或不为对话框创建新 JPanel "two" 的情况下动态完成此操作。
到目前为止我已经创建了下面的程序但是它没有在它之后添加图片运行。
import java.awt.BorderLayout;
import java.awt.Dialog.ModalityType;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.plaf.metal.MetalIconFactory.FolderIcon16;
public class Launcher {
JDialog keyboardDialog;
JDialog nameViewDialog;
JPanel nameViewJPanel;
JDialog FinalNameViewDialog;
private final transient ActionListener keyButtonListener =
new ActionListener() {
@Override public void actionPerformed(final ActionEvent event) {
System.out.println( ((JButton) event.getSource()).getActionCommand());
String buttonType=((JButton) event.getSource()).getActionCommand();
ImageIcon iconA = new ImageIcon(this.getClass().getResource("\Icons\A1.PNG"));
JLabel la=new JLabel(iconA);
nameViewJPanel.add(la);
nameViewJPanel.repaint();
}
};
public Launcher()
{
nameViewDialog=new JDialog();
nameViewDialog.setLayout(new BorderLayout());
nameViewJPanel=new JPanel();
nameViewJPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
nameViewDialog.setSize(430, 490);
ImageIcon iconA1 = new ImageIcon(this.getClass().getResource("\Icons\A1.PNG"));
JLabel la=new JLabel(iconA1);
nameViewJPanel.add(la);
ImageIcon iconA2 = new ImageIcon(this.getClass().getResource("\Icons\B1.PNG"));
JLabel lb=new JLabel(iconA2);
nameViewJPanel.add(lb);
nameViewDialog.add(nameViewJPanel);
keyboardDialog=new JDialog(nameViewDialog,ModalityType.MODELESS);
keyboardDialog.setLocationRelativeTo(nameViewDialog);
keyboardDialog.setSize(230,190);
keyboardDialog.setLayout(new GridLayout(2,3));
ImageIcon iconA = new ImageIcon(this.getClass().getResource("\JaLetters\A.PNG"));
ImageIcon iconB = new ImageIcon(this.getClass().getResource("\JaLetters\B.PNG"));
ImageIcon iconC = new ImageIcon(this.getClass().getResource("\JaLetters\C.PNG"));
ImageIcon iconD = new ImageIcon(this.getClass().getResource("\JaLetters\D.PNG"));
ImageIcon iconE = new ImageIcon(this.getClass().getResource("\JaLetters\E.PNG"));
ImageIcon iconF = new ImageIcon(this.getClass().getResource("\JaLetters\F.PNG"));
JButton ba=new JButton();
ba.setIcon(iconA);
ba.setActionCommand("A");
ba.addActionListener(keyButtonListener);
JButton bb=new JButton();
bb.setIcon(iconB);
bb.setActionCommand("B");
bb.addActionListener(keyButtonListener);
JButton bc=new JButton();
bc.setIcon(iconC);
bc.setActionCommand("C");
bc.addActionListener(keyButtonListener);
JButton bd=new JButton();
bd.setIcon(iconD);
bd.setActionCommand("D");
bd.addActionListener(keyButtonListener);
JButton be=new JButton();
be.setIcon(iconE);
be.setActionCommand("E");
be.addActionListener(keyButtonListener);
JButton bf=new JButton();
bf.setIcon(iconF);
bf.setActionCommand("F");
bf.addActionListener(keyButtonListener);
keyboardDialog.add(ba);
keyboardDialog.add(bb);
keyboardDialog.add(bc);
keyboardDialog.add(bd);
keyboardDialog.add(be);
keyboardDialog.add(bf);
nameViewDialog.setVisible(true);
keyboardDialog.setVisible(true);
}
public static void main(String args[])
{
new Launcher();
}
}
我在Dialog二中添加了一个CustomJPanel。每个 actionlistener 加载不同的图像并将其发送到绘制图像的 CustomJPanel。
这是它的 MVC:
主要class:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JDialog;
public class Main {
public static void main(String[] args) {
JDialog dialog = new JDialog();
dialog.setSize(600, 400);
dialog.setLocationRelativeTo(null);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
CustomJPanel customJDialog = new CustomJPanel();
dialog.add(customJDialog);
JDialog dialog2 = new JDialog();
dialog2.setLayout(new FlowLayout());
dialog2.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog2.setLocationRelativeTo(dialog);
JButton button1 = new JButton("Image 1");
JButton button2 = new JButton("Image 2");
dialog2.add(button1);
dialog2.add(button2);
dialog2.pack();
dialog2.setVisible(true);
button1.addActionListener(new ActionListener() {
BufferedImage image = null;
@Override
public void actionPerformed(ActionEvent e) {
try {
image = ImageIO.read(getClass().getResource("test1.jpg"));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// TODO Auto-generated method stub
customJDialog.setImage(image);
}
});
button2.addActionListener(new ActionListener() {
BufferedImage image = null;
@Override
public void actionPerformed(ActionEvent e) {
try {
image = ImageIO.read(getClass().getResource("test2.jpg"));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// TODO Auto-generated method stub
customJDialog.setImage(image);
}
});
}
}
CustomJPanel
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
public class CustomJPanel extends JPanel {
BufferedImage image = null;
public CustomJPanel() {
}
@Override
public void paintComponent(Graphics g) {
// TODO Auto-generated method stub
super.paintComponent(g);
g.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), this);
System.out.println(image);
}
public void setImage(BufferedImage image) {
this.image = image;
repaint();
}
}
我必须创建一个程序,在该程序中我将在对话框中显示一些选项供用户选择。 根据用户选择的选项,我必须在另一个之前为空的对话框中显示该图片。
示例:
- 对话框 "one" 和 "two" 都对用户可见。对话框 "one" 上面显示了很多按钮。其中 Dialog "two" 为空。
- 用户单击对话框 "one" 上可用的按钮 A,然后我必须在对话框 "two" 上显示该图片。
- 用户单击对话框 "one" 上可用的不同按钮 B,然后我必须在对话框 "two" 上显示该图片以及旧图片。
是否可以在不创建新对话框 "two" 或不为对话框创建新 JPanel "two" 的情况下动态完成此操作。
到目前为止我已经创建了下面的程序但是它没有在它之后添加图片运行。
import java.awt.BorderLayout;
import java.awt.Dialog.ModalityType;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.plaf.metal.MetalIconFactory.FolderIcon16;
public class Launcher {
JDialog keyboardDialog;
JDialog nameViewDialog;
JPanel nameViewJPanel;
JDialog FinalNameViewDialog;
private final transient ActionListener keyButtonListener =
new ActionListener() {
@Override public void actionPerformed(final ActionEvent event) {
System.out.println( ((JButton) event.getSource()).getActionCommand());
String buttonType=((JButton) event.getSource()).getActionCommand();
ImageIcon iconA = new ImageIcon(this.getClass().getResource("\Icons\A1.PNG"));
JLabel la=new JLabel(iconA);
nameViewJPanel.add(la);
nameViewJPanel.repaint();
}
};
public Launcher()
{
nameViewDialog=new JDialog();
nameViewDialog.setLayout(new BorderLayout());
nameViewJPanel=new JPanel();
nameViewJPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
nameViewDialog.setSize(430, 490);
ImageIcon iconA1 = new ImageIcon(this.getClass().getResource("\Icons\A1.PNG"));
JLabel la=new JLabel(iconA1);
nameViewJPanel.add(la);
ImageIcon iconA2 = new ImageIcon(this.getClass().getResource("\Icons\B1.PNG"));
JLabel lb=new JLabel(iconA2);
nameViewJPanel.add(lb);
nameViewDialog.add(nameViewJPanel);
keyboardDialog=new JDialog(nameViewDialog,ModalityType.MODELESS);
keyboardDialog.setLocationRelativeTo(nameViewDialog);
keyboardDialog.setSize(230,190);
keyboardDialog.setLayout(new GridLayout(2,3));
ImageIcon iconA = new ImageIcon(this.getClass().getResource("\JaLetters\A.PNG"));
ImageIcon iconB = new ImageIcon(this.getClass().getResource("\JaLetters\B.PNG"));
ImageIcon iconC = new ImageIcon(this.getClass().getResource("\JaLetters\C.PNG"));
ImageIcon iconD = new ImageIcon(this.getClass().getResource("\JaLetters\D.PNG"));
ImageIcon iconE = new ImageIcon(this.getClass().getResource("\JaLetters\E.PNG"));
ImageIcon iconF = new ImageIcon(this.getClass().getResource("\JaLetters\F.PNG"));
JButton ba=new JButton();
ba.setIcon(iconA);
ba.setActionCommand("A");
ba.addActionListener(keyButtonListener);
JButton bb=new JButton();
bb.setIcon(iconB);
bb.setActionCommand("B");
bb.addActionListener(keyButtonListener);
JButton bc=new JButton();
bc.setIcon(iconC);
bc.setActionCommand("C");
bc.addActionListener(keyButtonListener);
JButton bd=new JButton();
bd.setIcon(iconD);
bd.setActionCommand("D");
bd.addActionListener(keyButtonListener);
JButton be=new JButton();
be.setIcon(iconE);
be.setActionCommand("E");
be.addActionListener(keyButtonListener);
JButton bf=new JButton();
bf.setIcon(iconF);
bf.setActionCommand("F");
bf.addActionListener(keyButtonListener);
keyboardDialog.add(ba);
keyboardDialog.add(bb);
keyboardDialog.add(bc);
keyboardDialog.add(bd);
keyboardDialog.add(be);
keyboardDialog.add(bf);
nameViewDialog.setVisible(true);
keyboardDialog.setVisible(true);
}
public static void main(String args[])
{
new Launcher();
}
}
我在Dialog二中添加了一个CustomJPanel。每个 actionlistener 加载不同的图像并将其发送到绘制图像的 CustomJPanel。
这是它的 MVC:
主要class:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JDialog;
public class Main {
public static void main(String[] args) {
JDialog dialog = new JDialog();
dialog.setSize(600, 400);
dialog.setLocationRelativeTo(null);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
CustomJPanel customJDialog = new CustomJPanel();
dialog.add(customJDialog);
JDialog dialog2 = new JDialog();
dialog2.setLayout(new FlowLayout());
dialog2.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog2.setLocationRelativeTo(dialog);
JButton button1 = new JButton("Image 1");
JButton button2 = new JButton("Image 2");
dialog2.add(button1);
dialog2.add(button2);
dialog2.pack();
dialog2.setVisible(true);
button1.addActionListener(new ActionListener() {
BufferedImage image = null;
@Override
public void actionPerformed(ActionEvent e) {
try {
image = ImageIO.read(getClass().getResource("test1.jpg"));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// TODO Auto-generated method stub
customJDialog.setImage(image);
}
});
button2.addActionListener(new ActionListener() {
BufferedImage image = null;
@Override
public void actionPerformed(ActionEvent e) {
try {
image = ImageIO.read(getClass().getResource("test2.jpg"));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// TODO Auto-generated method stub
customJDialog.setImage(image);
}
});
}
}
CustomJPanel
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
public class CustomJPanel extends JPanel {
BufferedImage image = null;
public CustomJPanel() {
}
@Override
public void paintComponent(Graphics g) {
// TODO Auto-generated method stub
super.paintComponent(g);
g.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), this);
System.out.println(image);
}
public void setImage(BufferedImage image) {
this.image = image;
repaint();
}
}