2016-01-06 127 views
-1

我试图为JButon进入一个事件,我创建:如何将动作添加到按钮?

JButton botton1=new JButton("welcom to my show db! lets start"); 
    botton1.setFont(new Font ("Eras Medium ITC",Font.BOLD,20)); 
    this.add(botton1); 

    JPanel Basic_panel=new JPanel(); 
    Basic_panel.setName("SHOW DB "); 
    Basic_panel.setBounds(x,y,width,hight); 

    botton1.addActionListener(this) ; 
} 
      public void actionPerformed(ActionEvent e) { 
       if (e.getSource()==botton1){ 

现在我想进入另一个JFrame我做了,使第一消失。怎么样?

+0

[打开一个新的JFrame并点击按钮后关闭前一个](http://stackoverflow.com/questions/28860914/opening-a-new-jframe-and-close-previous-after-clicking-button ) – ArcticLord

+1

请解释你真正想要的。你想隐藏/处理显示按钮的帧,它已经开始了操作? –

+2

*“现在我想进入另一个JFrame的我做了,使第一消失。” * 1)请参见[多个JFrames,好/坏习惯的用?(http://stackoverflow.com/q/9554636/418556 )2)代替利用['CardLayout'](http://download.oracle.com/javase/8/docs/api/java/awt/CardLayout.html),如图[此答案](HTTP:// stackoverflow.com/a/5786005/418556)。 3)为了更快地获得更好的帮助,请发布[MCVE]或[简短,独立,正确的示例](http://www.sscce.org/)。 –

回答

3

对于你原来的问题:

如何添加动作按钮?

你可能想检查How to write an Action Listener

关于第二个问题:

现在我想进入另一个JFrame的我做了,而且做的第一消失。怎么样?

请检查这两种方法:)

选项1(推荐)

如果你想要做正确的方式,你应该使用一个CardLayout在上面他comment建议@AndrewThompson。

我也看到你使用的是空布局(因为setBounds()方法),你可能也想摆脱它,请参阅Why is it frowned upon to use a null layout in Swing?Null Layout is Evil知道为什么,insted的你应该使用作为他们的Layout Manager或组合在下面的代码中显示,基于@ AndrewThompson的answer(与他上面评论中相同),但有点修改与JFrame而不是JOptionPane一起使用,所以通过提高他的原始答案来给他信任!

这将产生以下输出:

enter image description hereenter image description here

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

class CardLayoutDemo { 
    JButton button1, button2; 

    CardLayoutDemo() { 
     JFrame gui = new JFrame("CardLayoutDemo"); 
     button1 = new JButton("Go to pane 2"); 
     button2 = new JButton("Go to pane 1"); 
     JPanel pane1 = new JPanel(); 
     pane1.setLayout(new BoxLayout(pane1, BoxLayout.PAGE_AXIS)); 
     JPanel pane2 = new JPanel(); 
     pane2.setLayout(new BoxLayout(pane2, BoxLayout.PAGE_AXIS)); 
     final CardLayout cl = new CardLayout(); 
     final JPanel cards = new JPanel(cl); 

     pane1.add(new JLabel("This is my pane 1")); 
     pane1.add(button1); 

     pane2.add(new JLabel("This is my pane 2")); 
     pane2.add(button2); 

     gui.add(cards); 
     cards.add(pane1, "frame1"); 
     cards.add(pane2, "frame2"); 

     ActionListener al = new ActionListener(){ 
      public void actionPerformed(ActionEvent ae) { 
       if (ae.getSource() == button1) { 
        cl.show(cards, "frame2"); 
       } else if (ae.getSource() == button2) { 
        cl.show(cards, "frame1"); 
       } 
      } 
     }; 

     button1.addActionListener(al); 
     button2.addActionListener(al); 

     gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     gui.pack(); 
     gui.setVisible(true); 
    } 
    public static void main(String[] args) { 
     new CardLayoutDemo(); 
    } 
} 

使用这个选项,只有1 JFrame,但你可以通过不同的看法改变了,你不要骚扰与多个Windows用户任务栏。

一个提示这里是:如果你要打开这个第二JFrame,以防止用户从一日一做的事情,你应该考虑使用JOptionPane或第二个JFrame将仅包含一个比特的信息,你不要我不想一直呆在那里(就像弹出一样)。


选项2(不推荐)

但如果你真的真的真的想使用多个JFrame秒(这是not recommended),您可以dispose()它。当时你打电话给你的新的JFrame被创建。例如,下面的代码产生这样的输出:

enter image description hereenter image description here

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 
public class TwoJFrames { 
    JFrame frame; 
    JButton button; 

    TwoJFrames() { 
     frame = new JFrame("1st frame"); 
     button = new JButton("Click me!"); 

     button.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       new AnotherFrame(); 
       frame.dispose(); 
      } 
     }); 

     frame.add(button); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String args[]) { 
     new TwoJFrames(); 
    } 

    class AnotherFrame { 
     JFrame frame2; 
     JLabel label; 
     AnotherFrame() { 
      frame2 = new JFrame("Second Frame"); 
      label = new JLabel("This is my second frame"); 

      frame2.add(label); 
      frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame2.pack(); 
      frame2.setVisible(true); 
     } 
    } 
} 

在这种情况下,你可能要考虑setVisible(),而是如果你想回到以前的状态或重新打开这一个关闭第二时JFrame


我上面的代码都称之为一个Minimal, Complete, and Verifiable example (MCVE)或Runnable的实例或Short, Self Contained, Correct Example (SSCCE)这是代码,你可以复制粘贴,看到了同样的输出为我,当你的代码有错时,这些例子非常方便,因为我们可以看到你的错误在哪里,或者能够更容易和/或更快地找到它们。

您应该考虑阅读所有我所提供的链接(包括这些的),并为你的未来的问题,使像我之前所做的那样,这样就能避免混乱,你会得到更多,更快,更好响应。

+0

谢谢你,我没有axactaly作为选项1..its好。不过,为什么当我tryed保存fram2为私有中的第一个,并调用它在它没有工作??和方法,只有当我称之为新的一个 ? – DANA

+0

还有一个问题..我正好添加图片文件??我在哪里把它保存在Java ecalipse? – DANA

+0

这是另一个问题,你应该问另一个问题。但在此之前,你应该[谷歌一下](https://www.google.com.mx/search?client=ubuntu&channel=fs&q=eclipse+java+import+image&ie=utf-8&oe=utf-8&gfe_rd=cr&ei=8kaNVrmQMvKosATp6ZCACQ)和第一个结果会引导你[这个问题](http://stackoverflow.com/questions/5657469/how-do-i-go-about-adding-an-image-into-a-java-project-with-蚀)。如果你没有在谷歌上找到它,那么只有这样,你可以在这里问你试过的东西,而不是倒退。 – Frakcool