怎样在java中添加按钮_java – 如何向按钮添加动作?

我正在尝试为我创建的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 add action to a button?

对于你的第二个问题:

Now I want to enter another JFrame I made, and make the first disappear. How?

请检查两种方法:)

选项1(推荐)

如果你想以正确的方式做到这一点,你应该使用@AndrewThompson在他上面的comment中推荐的CardLayout.

我也看到你正在使用Null Layout(因为setBounds()方法),你可能也想摆脱它,请参阅Why is it frowned upon to use a null layout in Swing?和Null Layout is Evil以了解原因,你应该使用Layout Manager或它们的组合,如图所示以下代码基于@AndrewThompson的answer(与上面的评论相同),但有点修改后可以使用JFrame而不是JOptionPane,所以通过提升他的原始答案给予他信任!

这产生以下输出:

25f001ae55637cb55cc75f38e3681758.png602aed62a4f4c906238d8d2a71c5837d.png

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,但您可以通过不同的视图进行更改,并且不会在任务栏上烦扰具有多个窗口的用户.

这里还有一个提示:如果你要打开第二个JFrame来防止用户在第一个上做某事,你应该考虑使用JOptionPane或者这个第二个JFrame只包含一些你不想要的信息.一直都在那里(像弹出一样).

选项2(不推荐)

但如果你真的真的想要使用多个JFrame(即not recommended),你可以dispose().当您调用要创建的新JFrame时.例如,以下代码生成此输出:

9728307b86c58de219d02b4fe984ee53.pngf063bd6d3084d08cad3fdd54c12a8ed5.png

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 Example或Short, Self Contained, Correct Example (SSCCE),这些代码可以复制粘贴并看到与我相同的输出,当您的代码出错时,这些示例非常方便,因为我们可以看到您的位置错误是或者能够更容易和/或更快地找到它们.

您应该考虑阅读我提供的所有链接(包括这些链接),并为将来的问题做出类似我上面所做的事情,这样你就可以避免混淆,你会得到更多,更快,更好的回复.

标签:actionlistener,java,swing,jbutton

来源: https://codeday.me/bug/20190929/1832411.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值