我有两个面板的类PannelloM和PannelloM2。
最初,我将PannelloM2实例添加到JFrame。 我想按一下时,将“ new ..”加载到JFrame PannelloM而不是PannelloM2上。我该如何实现
问题是我在面板类中有按钮侦听器,所以我无法将面板本身添加到框架中。
谢谢
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.rmi.*;
import java.util.*;
class ProvaMail{
public static void main(String[] args){
EmailMonitor em = new EmailMonitor();
em.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
em.setVisible(true);
}
}
class EmailMonitor extends JFrame{
private PannelloM pannelloM;
private PannelloM2 pannelloM2;
public EmailMonitor(){
ini();
pannelloM= new PannelloM();
pannelloM2= new PannelloM2();
add(pannelloM2);
}
private void ini(){
// prende la dimensione dello schermo
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
int screenHeight = screenSize.height;
int screenWidth = screenSize.width;
//centra il frame nello schermo
setSize(screenWidth / 4, screenHeight / 2);
setLocation(screenWidth / 4, screenHeight / 4);
//imposta il titolo e il dimensionamento non automatico
setTitle("Email Monitor");
setResizable(false);
}
}
class PannelloM2 extends JPanel implements ActionListener{
private JPanel panel1;
private JPanel panel4;
JButton nuovo;
JButton leggi;
JButton elimina;
public PannelloM2(){
iniP();
}
private void iniP(){
setLayout(new BorderLayout());
panel1 = new JPanel();
panel1.setLayout(new BorderLayout());
JLabel label0 = new JLabel("Posta in arrivo:");
panel1.add(label0, BorderLayout.NORTH);
add(panel1, BorderLayout.NORTH);
panel4 = new JPanel();
panel4.setLayout(new BorderLayout());
nuovo = new JButton("Nuovo..");
leggi = new JButton("Leggi..");
elimina = new JButton("Elimina..");
panel4.add(nuovo,BorderLayout.NORTH);
panel4.add(leggi,BorderLayout.CENTER);
panel4.add(elimina,BorderLayout.SOUTH);
add(panel4, BorderLayout.SOUTH);
//registro i componenti al listener
nuovo.addActionListener(this);
leggi.addActionListener(this);
elimina.addActionListener(this);
}
public void actionPerformed(ActionEvent event)
{
String command = event.getActionCommand();
if(command.equals("Nuovo..")) { }
else if(command.equals("Leggi..")) {
}
else if(command.equals("Elimina..")) {
}
}
}
class PannelloM extends JPanel {
private JPanel panel1;
private JPanel panel2;
private JPanel panel3;
private JPanel panel4;
private JPanel panel5;
JButton arrivo;
JButton rispondi;
JButton rispondiTutti;
JButton inoltra;
JButton after;
JTextArea text1;
JTextField text2;
JTextField text3;
public PannelloM(){
iniP();
}
private void iniP(){
setLayout(new BorderLayout());
panel1 = new JPanel();
panel1.setLayout(new BorderLayout());
JLabel label0 = new JLabel("Destinatari:");
panel1.add(label0, BorderLayout.NORTH);
text2 = new JTextField("",10);
panel1.add(text2, BorderLayout.CENTER);
panel2 = new JPanel();
panel2.setLayout(new BorderLayout());
JLabel label1 = new JLabel("Oggetto:");
panel2.add(label1, BorderLayout.NORTH);
text3 = new JTextField("",20);
panel2.add(text3, BorderLayout.CENTER);
panel1.add(panel2, BorderLayout.SOUTH);
add(panel1, BorderLayout.NORTH);
//imposto terzo pannello
panel3 = new JPanel();
panel3.setLayout(new BorderLayout());
JLabel label3 = new JLabel("Testo:");
panel3.add(label3, BorderLayout.NORTH);
text1 = new JTextArea(5,20);
panel3.add(text1, BorderLayout.CENTER);
add(panel3, BorderLayout.CENTER);
//imposto quarto pannello
panel4 = new JPanel();
panel4.setLayout(new BorderLayout());
arrivo = new JButton("Posta in arrivo..");
rispondi = new JButton("Rispondi..");
rispondiTutti = new JButton("Rispondi a tutti..");
inoltra = new JButton("Inoltra..");
panel4.add(arrivo,BorderLayout.NORTH);
panel4.add(rispondi,BorderLayout.CENTER);
//imposto quinto pannello dentro il panel 4
panel5 = new JPanel();
panel5.setLayout(new BorderLayout());
panel5.add(rispondiTutti,BorderLayout.NORTH);
panel5.add(inoltra,BorderLayout.SOUTH);
panel4.add(panel5,BorderLayout.SOUTH);
add(panel4,BorderLayout.SOUTH);
//registro i componenti al listener
arrivo.addActionListener(this);
rispondi.addActionListener(this);
rispondiTutti.addActionListener(this);
inoltra.addActionListener(this);
}
}
答案 0 :(得分:1)
从面板PannelloM和PannelloM2中删除ActionListener
,并在ActionListener
内添加EmailMonitor
public class EmailMonitor extends JFrame implements ActionListener {
然后实现抽象方法actionPerformed
我会处理将面板从pannello2
更改为panneloM
@Override
public void actionPerformed(ActionEvent event) {
String command = event.getActionCommand();
if (command.equals("Nuovo..")) {
this.setContentPane(pannelloM);
this.invalidate();
this.validate();
} else if (command.equals("Leggi..")) {
} else if (command.equals("Elimina..")) {
}
}
将按钮侦听器连接到EmailMonitor
我将在PannelloM2
和PannelloM
构造函数上创建对EmailMonitor的引用
private EmailMonitor em;
public PannelloM2(EmailMonitor em) {
this.em = em;
iniP();
}
和
private EmailMonitor em;
public PannelloM(EmailMonitor em) {
this.em = em;
iniP();
}
然后,将JPanel中的addActionListeners
按钮更改为引用EmailMonitor
//registro i componenti al listener
nuovo.addActionListener(em);
leggi.addActionListener(em);
elimina.addActionListener(em);
和
//registro i componenti al listener
arrivo.addActionListener(em);
rispondi.addActionListener(em);
rispondiTutti.addActionListener(em);
EmailMonitor以此初始化您的面板
public EmailMonitor() {
ini();
pannelloM = new PannelloM(this);
pannelloM2 = new PannelloM2(this);
add(pannelloM2);
}