当前位置: 首页 > 面试题库 >

带有面板和按钮的setText方法

牛华皓
2023-03-14
问题内容

我尝试以多种方式修复此问题,并尝试在各处搜索答案,我的颜色按钮正常工作,但内置数字按钮无法正常工作。

   package tralala;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

import java.awt.*;

public class DugmiciKojiMenjajuBoju extends JFrame implements ActionListener {

/**
 * 
 */
private static final long serialVersionUID = 4317497849622426733L;
private JButton dugme1;
private JButton dugme2;
private JButton dugme3;
private JPanel panel;
private JOptionPane a;
private JPanel panel1;
private JButton dugmeBroja0;
private JButton dugmeBroja1;
private JButton dugmeBroja2;
private JButton dugmeBroja3;
private JButton dugmeBroja4;
private JButton dugmeBroja5;
private JButton dugmeBroja6;
private JButton dugmeBroja7;
private JButton dugmeBroja8;
private JButton dugmeBroja9;
private JButton dugmeZaPlus;
private JButton dugmeZaMinus;
private JButton dugmeZaPuta;
private JButton dugmeZaPodeljeno;
private JButton dugmeZaJednako;
private JTextField polje;

DugmiciKojiMenjajuBoju(){
    getContentPane().setBackground(Color.white);
    this.setLayout(new FlowLayout());
    a = new JOptionPane("");
    dugme1 = new JButton("zuta");
    dugme2 = new JButton("plava");
    dugme3 = new JButton("crvena");

    dugmeBroja0 = new JButton("0");
    dugmeBroja1 = new JButton("1");
    dugmeBroja2 = new JButton("2");
    dugmeBroja3 = new JButton("3");
    dugmeBroja4 = new JButton("4");
    dugmeBroja5 = new JButton("5");
    dugmeBroja6 = new JButton("6");
    dugmeBroja7 = new JButton("7");
    dugmeBroja8 = new JButton("8");
    dugmeBroja9 = new JButton("9");
    dugmeZaPlus = new JButton("+");
    dugmeZaMinus = new JButton("-");
    dugmeZaPuta = new JButton("*");
    dugmeZaPodeljeno = new JButton("/");
    dugmeZaJednako = new JButton("=");
    polje = new JTextField("", 20);

    panel = new JPanel();
    panel1 = new JPanel();
    dugmeBroja0.setSize(50,50);
    dugmeBroja1.setSize(50,50);
    dugmeBroja2.setSize(50,50);
    dugmeBroja3.setSize(50,50);
    dugmeBroja4.setSize(50,50);
    dugmeBroja5.setSize(50,50);
    dugmeBroja6.setSize(50,50);
    dugmeBroja7.setSize(50,50);
    dugmeBroja8.setSize(50,50);
    dugmeBroja9.setSize(50,50);


    panel1.add(dugmeBroja0);
    panel1.add(dugmeBroja1);
    panel1.add(dugmeBroja2);
    panel1.add(dugmeBroja3);
    panel1.add(dugmeBroja4);
    panel1.add(dugmeBroja5);
    panel1.add(dugmeBroja6);
    panel1.add(dugmeBroja7);
    panel1.add(dugmeBroja8);
    panel1.add(dugmeBroja9);
    panel1.add(dugmeZaPlus);
    panel1.add(dugmeZaMinus);
    panel1.add(dugmeZaPuta);
    panel1.add(dugmeZaPodeljeno);
    panel1.add(dugmeZaJednako);
    panel1.add(polje);


    panel1.setLayout(new FlowLayout(50, 0 ,0));
    FlowLayout mojLayout = new FlowLayout(FlowLayout.CENTER , 20 , 20);
    panel.setLayout(mojLayout);
    panel.add(dugme1);
    panel.add(dugme2);
    panel.add(dugme3);

    this.setTitle("Kalkulator Koji Menja Boju Pozadine");
    this.setSize(500,500);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setLocationRelativeTo(null);
    this.add(panel1);
    this.add(panel);
    dugme1.addActionListener(this);
    dugme2.addActionListener(this);
    dugme3.addActionListener(this);
    polje.addActionListener(this);
    panel.setBackground(Color.white);
    panel1.setBackground(Color.white);
}
public static void main(String[] args) {
     DugmiciKojiMenjajuBoju  a = new  DugmiciKojiMenjajuBoju();
     a.setVisible(true);

}

@Override
public void actionPerformed(ActionEvent arg0) {
    if( arg0.getSource() == dugme1){
        panel.setBackground(Color.yellow);
        panel1.setBackground(Color.yellow);
        getContentPane().setBackground(Color.yellow);
        a.setSize(200,200);
        a.showMessageDialog(this, "Klikcite dalje :D" ,"Postavili ste zutu",JOptionPane.INFORMATION_MESSAGE);
    }
    else if(arg0.getSource() == dugme2){
        panel.setBackground(Color.blue);
        panel1.setBackground(Color.blue);
        getContentPane().setBackground(Color.blue);
        a.setSize(200,200);
        a.showMessageDialog(this, "Klikcite dalje :D","Postavili ste plavu", JOptionPane.INFORMATION_MESSAGE);
    }
    else if(arg0.getSource() == dugme3){
        panel.setBackground(Color.red);
        panel1.setBackground(Color.red);
        getContentPane().setBackground(Color.red);
        a.setSize(200,200);
        a.showMessageDialog(this,  "Klikcite dalje :D","Postavili ste crvenu",JOptionPane.INFORMATION_MESSAGE);
    }
    else if(arg0.getSource() == dugmeBroja0){
        polje.setText("0");
        System.out.println("blabla");
    }

}
}

我的按钮0不起作用…所以我无法继续编写代码。


问题答案:

我的按钮0不起作用…所以我无法继续编写代码。

您没有向按钮添加ActionListener。

但是,在解决该问题之前,您应该简化代码,并学习如何使用循环来创建具有相同功能的多个组件。这是一个创建单个ActionListener并将其添加到每个按钮的示例:

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

public class CalculatorPanel extends JPanel
{
    private JTextField display;

    public CalculatorPanel()
    {
        Action numberAction = new AbstractAction()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
//              display.setCaretPosition( display.getDocument().getLength() );
                display.replaceSelection(e.getActionCommand());
            }
        };

        setLayout( new BorderLayout() );

        display = new JTextField();
        display.setEditable( false );
        display.setHorizontalAlignment(JTextField.RIGHT);
        add(display, BorderLayout.NORTH);

        JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout( new GridLayout(0, 5) );
        add(buttonPanel, BorderLayout.CENTER);

        for (int i = 0; i < 10; i++)
        {
            String text = String.valueOf(i);
            JButton button = new JButton( text );
            button.addActionListener( numberAction );
            button.setBorder( new LineBorder(Color.BLACK) );
            button.setPreferredSize( new Dimension(50, 50) );
            buttonPanel.add( button );
        }
    }

    private static void createAndShowUI()
    {
        JFrame frame = new JFrame("Calculator Panel");
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.add( new CalculatorPanel() );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}

另外,请勿setSize()在您的组件上使用。布局管理器负责确定组件的大小。



 类似资料:
  • 问题内容: 好吧,这种特定的布局让我很烦。而且似乎找不到找到listView的方法,在底部有一行按钮,这样listview不会延伸到按钮的上方,因此这些按钮始终固定在屏幕的底部。这就是我想要的: 删除了死的ImageShack链接 似乎应该这么简单,但是我尝试过的所有方法都失败了。有什么帮助吗? 这是我当前的代码: 问题答案: 我认为这就是您想要的。

  • 我的app里有一些这样的按钮: 我正在尝试创建一个带有文本和图标的按钮。Android:DrawableLeft对我不起作用(也许会,但我不知道如何设置图标的最大高度)。 所以我创建了一个包含ImageView和TextView的LinearLayout,并使其像一个按钮一样运行: 我的新按钮正是我想要的(字体大小,图标和文本放置)。但它看起来不像我的默认按钮: 所以我试着改变新按钮的背景和文本颜

  • 我正准备制作一个新的应用程序,我偶然发现了一个非常酷的侧边栏(按钮面板),我将尝试添加到应用程序中(它是Spotify上的左侧栏)。我很好奇的是这个原则(看看附上的图片)。 在顶部的3个按钮中(我假设是JList或JTable项)。 在中间我们有一个“您的音乐”标题(也许是JLabel??) 我们还有一个新的播放列表(JButton) ,然后是播放列表列表(JList还是jtable?) 我想知道

  • 是否可以在工具栏中同时显示主页图标和后退图标?1) 是否可以更改后退按钮图标和主页图标的显示顺序。目前,它首先显示箭头按钮,然后显示徽标(主页按钮) 2) 第二个要求是在单击home图标并返回上一个屏幕(如果是back按钮)时清除活动堆栈。 我有以下代码,将显示一个箭头键和主页图标,这是设置为标志。是否可以处理这两个图标上的点击事件: 我可以通过onOptionsITemSelec方法处理点击箭头

  • 我想包括使用FXML的图标和文本按钮。 我知道在FXML中,我可以用以下代码添加图像: 但我想知道如何将其与按钮代码合并:

  • 我正在做一个计数计时器使用按钮开始和停止。 我需要帮助解决这个...当我按下“Start”按钮时,它可以工作(使用)但是不会为我更新。 但是,如果将放在而不是在settext会更新...但我没有按“开始”键。如何使setText在“开始”按钮被按下后更新?