请教java基础问题

king_2007 2015-11-23 10:19:43
请问有两个public 类都继承了JFrame,并且在一个包中,其中b类的事件要调用a类中的JButton的对象jb,请问如何调用?不要用匿名对象的形式调用。
...全文
551 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ikaoni 2015-11-27
  • 打赏
  • 举报
回复
还有一种办法,第2个窗体使用JDialog,模态显示,在1个窗体里JDialog显示后面,添加重新启用几个按钮的代码。
ikaoni 2015-11-27
  • 打赏
  • 举报
回复
楼上代码测试可用, 建议将几个button都设成private,提供一个public的enabledButton()方法,供第2个窗体调用,因为你第1个窗体几个按钮都会弹出新窗体,每个新窗体退出时都要调用启用button吧
king_2007 2015-11-27
  • 打赏
  • 举报
回复
引用 9 楼 sq1303037035 的回复:
import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.GridLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; public class MainFrame extends JFrame{ /** * */ private static final long serialVersionUID = 1L; public static MainFrame main; public static void main(String[] args) { EventQueue.invokeLater(new Runnable(){ @Override public void run() { // TODO Auto-generated method stub main = new MainFrame(); main.setVisible(true); } }); } public JButton lb,rb1,rb2,rb3,rb4,rb5; private JPanel jp; public static MainFrame getInstance(){ return main; } private MainFrame(){ lb = new JButton(); rb1 = new JButton("上班登记"); rb2 = new JButton("下班登记"); rb3 = new JButton("请假登记"); rb4 = new JButton("统计情况"); rb5 = new JButton("退出系统"); jp = new JPanel(); jp.setLayout(new GridLayout(5,1,50,50)); jp.setBorder(new EmptyBorder(20,20,20,20)); jp.add(rb1); jp.add(rb2); jp.add(rb3); jp.add(rb4); jp.add(rb5); this.setLayout(new BorderLayout()); this.add(lb,"Center"); this.add(jp,"East"); this.setSize(600, 500); this.setTitle("Mini人事管理系统"); this.setLocationRelativeTo(this); this.setResizable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); rb1.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent arg0) { // TODO Auto-generated method stub if(arg0.getSource()==rb1) { new OnWorkPanel().setVisible(true); rb1.setEnabled(false); rb2.setEnabled(false); rb3.setEnabled(false); rb4.setEnabled(false); rb5.setEnabled(false); } } }); } } 另一个类 import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; public class OnWorkPanel extends JFrame{ /** * */ public static OnWorkPanel onwork; private static final long serialVersionUID = 2732049324602070030L; /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub onwork= new OnWorkPanel(); } public OnWorkPanel() { this.setSize(500, 550); this.setTitle("上班登记页面"); this.setLocationRelativeTo(this); this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this.setAlwaysOnTop(true); this.setResizable(false); this.setVisible(true); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent arg0) { // TODO Auto-generated method stub // MainFrame mf = new MainFrame(); MainFrame.getInstance().rb1.setEnabled(true); MainFrame.getInstance().rb2.setEnabled(true); MainFrame.getInstance().rb3.setEnabled(true); MainFrame.getInstance().rb4.setEnabled(true); MainFrame.getInstance().rb5.setEnabled(true); } });} }
请问下,不用EventQueue.invokeLater(new Runnable()这个方法,你这个程序能正常运行吗?
君莫傲 2015-11-27
  • 打赏
  • 举报
回复
本人以虚心学习的态度坐等答案!
捏造的信仰 2015-11-26
  • 打赏
  • 举报
回复
引用 6 楼 king_2007 的回复:
import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.GridLayout; ......
要学会正确帖代码,你这样没人看得清。 另外你的类暴露的方式不对。如果你希望 A 类里面的 Button 文字是可以修改的,那么应该写一个 setButtonText(String text) 方法,在方法里面去设置 Button 文字,这样调用者就无需直接取得 Button 对象了。
sq1303037035 2015-11-26
  • 打赏
  • 举报
回复
import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.GridLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; public class MainFrame extends JFrame{ /** * */ private static final long serialVersionUID = 1L; public static MainFrame main; public static void main(String[] args) { EventQueue.invokeLater(new Runnable(){ @Override public void run() { // TODO Auto-generated method stub main = new MainFrame(); main.setVisible(true); } }); } public JButton lb,rb1,rb2,rb3,rb4,rb5; private JPanel jp; public static MainFrame getInstance(){ return main; } private MainFrame(){ lb = new JButton(); rb1 = new JButton("上班登记"); rb2 = new JButton("下班登记"); rb3 = new JButton("请假登记"); rb4 = new JButton("统计情况"); rb5 = new JButton("退出系统"); jp = new JPanel(); jp.setLayout(new GridLayout(5,1,50,50)); jp.setBorder(new EmptyBorder(20,20,20,20)); jp.add(rb1); jp.add(rb2); jp.add(rb3); jp.add(rb4); jp.add(rb5); this.setLayout(new BorderLayout()); this.add(lb,"Center"); this.add(jp,"East"); this.setSize(600, 500); this.setTitle("Mini人事管理系统"); this.setLocationRelativeTo(this); this.setResizable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); rb1.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent arg0) { // TODO Auto-generated method stub if(arg0.getSource()==rb1) { new OnWorkPanel().setVisible(true); rb1.setEnabled(false); rb2.setEnabled(false); rb3.setEnabled(false); rb4.setEnabled(false); rb5.setEnabled(false); } } }); } } 另一个类 import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; public class OnWorkPanel extends JFrame{ /** * */ public static OnWorkPanel onwork; private static final long serialVersionUID = 2732049324602070030L; /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub onwork= new OnWorkPanel(); } public OnWorkPanel() { this.setSize(500, 550); this.setTitle("上班登记页面"); this.setLocationRelativeTo(this); this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this.setAlwaysOnTop(true); this.setResizable(false); this.setVisible(true); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent arg0) { // TODO Auto-generated method stub // MainFrame mf = new MainFrame(); MainFrame.getInstance().rb1.setEnabled(true); MainFrame.getInstance().rb2.setEnabled(true); MainFrame.getInstance().rb3.setEnabled(true); MainFrame.getInstance().rb4.setEnabled(true); MainFrame.getInstance().rb5.setEnabled(true); } });} }
king_2007 2015-11-26
  • 打赏
  • 举报
回复
难道就没有人能回答吗?
king_2007 2015-11-25
  • 打赏
  • 举报
回复
import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.GridLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; public class MainFrame extends JFrame { /** * */ private static final long serialVersionUID = -6839021889883843879L; public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { // TODO Auto-generated method stub MainFrame main= new MainFrame(); main.setVisible(true); } }); } private JButton lb,rb1,rb2,rb3,rb4,rb5; private JPanel jp; public MainFrame() { lb=new JButton(); rb1=new JButton("上 班 登 记"); rb2=new JButton("下 班 登 记"); rb3=new JButton("请 假 登 记"); rb4=new JButton("统 计 情 况"); rb5=new JButton("退 出 系 统"); jp=new JPanel(); jp.setLayout(new GridLayout(5,1,50,50)); jp.setBorder(new EmptyBorder(20,20,20,20)); jp.add(rb1); jp.add(rb2); jp.add(rb3); jp.add(rb4); jp.add(rb5); this.setLayout(new BorderLayout()); this.add(lb,"Center"); this.add(jp,"East"); this.setSize(600,500); this.setTitle("Mini人事管理系统"); this.setLocationRelativeTo(this); this.setResizable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); rb1.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent arg0) { // TODO Auto-generated method stub if(arg0.getSource()==rb1) { rb1.setEnabled(false); rb2.setEnabled(false); rb3.setEnabled(false); rb4.setEnabled(false); rb5.setEnabled(false); new OnWorkPanel().setVisible(true); } } }); } } 另一个文件OnWorkPanel类 问题是现在一个主类如何调用另一个主类中的对象及其方法。调试出现 import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; public class OnWorkPanel extends JFrame { /** * */ public static OnWorkPanel onwork; private static final long serialVersionUID = 2732049324602070030L; /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub onwork= new OnWorkPanel(); } public OnWorkPanel() { this.setSize(500,550); this.setTitle("上班登记页面"); this.setLocationRelativeTo(this); this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this.setAlwaysOnTop( true); this.setResizable(false); this.setVisible(true); this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent arg0) { // TODO Auto-generated method stub ??????rb1.setEnabled(true); rb2.setEnabled(true); rb3.setEnabled(true); rb4.setEnabled(true); rb5.setEnabled(true); } });} } 请问两个public 类,第二个类事件方法中如何调用第一个类的JButton的对象?不要用匿名对象。
Elink_Li 2015-11-24
  • 打赏
  • 举报
回复
给a类的jb对象一个getter方法,在b类监听中直接调用getJb().doClick();
nomasp 2015-11-24
  • 打赏
  • 举报
回复
既然是同一个包,在public下就行
dracularking 2015-11-24
  • 打赏
  • 举报
回复
同包,只要b类不是private,就能被a类访问
oh_Maxy 2015-11-24
  • 打赏
  • 举报
回复
把a作为b的一个成员属性。
心随自在飞 2015-11-24
  • 打赏
  • 举报
回复
设置为public 。随意调

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧