如何将动作添加到按钮?
我试图为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
我做了,使第一消失。怎么样?
对于你原来的问题:
如何添加动作按钮?
你可能想检查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
一起使用,所以通过提高他的原始答案来给他信任!
这将产生以下输出:
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
被创建。例如,下面的代码产生这样的输出:
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)这是代码,你可以复制粘贴,看到了同样的输出为我,当你的代码有错时,这些例子非常方便,因为我们可以看到你的错误在哪里,或者能够更容易和/或更快地找到它们。
您应该考虑阅读所有我所提供的链接(包括这些的),并为你的未来的问题,使像我之前所做的那样,这样就能避免混乱,你会得到更多,更快,更好响应。
谢谢你,我没有axactaly作为选项1..its好。不过,为什么当我tryed保存fram2为私有中的第一个,并调用它在它没有工作??和方法,只有当我称之为新的一个 ? – DANA
还有一个问题..我正好添加图片文件??我在哪里把它保存在Java ecalipse? – DANA
这是另一个问题,你应该问另一个问题。但在此之前,你应该[谷歌一下](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
[打开一个新的JFrame并点击按钮后关闭前一个](http://stackoverflow.com/questions/28860914/opening-a-new-jframe-and-close-previous-after-clicking-button ) – ArcticLord
请解释你真正想要的。你想隐藏/处理显示按钮的帧,它已经开始了操作? –
*“现在我想进入另一个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/)。 –