java - JButton - 单击动画

标签 java animation jframe jbutton

我阅读了一些关于此的贡献,但没有任何帮助。 我尝试用 gui 制作一个小应用程序, 但问题是,如果我单击按钮,不会出现动画,也不会发生任何事情。我希望你可以帮助我。 这就是代码:

public class StartFrame extends JFrame{

JTextField eingabe;
JLabel inhalt;
JButton button;
JCheckBox fett;
JCheckBox kursiv;
JCheckBox groß;
JPanel panel;

StartFrame(int sizeWidth, int sizeHeight, String title){

setSize(sizeWidth, sizeHeight);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle(title);
setLocationRelativeTo(null);
setLayout(null);

inhalt = new JLabel("TeXt");
inhalt.setBounds(0, 0, 500, 60);
Font font = inhalt.getFont().deriveFont(Font.ITALIC, 15);
inhalt.setFont(font);
inhalt.setToolTipText("Das ist ein Text");
add(inhalt);

button = new JButton("HIER");
button.setBounds(100, 10, 100, 50);
button.addActionListener(new ClickListener());
button.setEnabled(false);
add(button);

eingabe = new JTextField();
eingabe.setBounds(300, 50, 150, 25);
eingabe.addCaretListener(new SchreibkopfListener());
add(eingabe);

panel = new JPanel();
panel.setLayout(null);
panel.setBounds(10, 200, 150, 100);
add(panel);

fett = new JCheckBox("Fett");
fett.setBounds(0, 0, 150, 25);
fett.addItemListener(new FettListener());
panel.add(fett);

kursiv = new JCheckBox("Kursiv");
kursiv.setBounds(0, 25, 150, 25);
panel.add(kursiv);

groß = new JCheckBox("Groß");
groß.setBounds(0, 50, 150, 25);
panel.add(groß);

setVisible(true);

}

private class ClickListener implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent arg0) {

        inhalt.setText(eingabe.getText());

    }



}

private class SchreibkopfListener implements CaretListener{

    @Override
    public void caretUpdate(CaretEvent arg0) {

        String inTextField = eingabe.getText();
        inTextField = inTextField.trim();
        if(inTextField.isEmpty()){
            button.setEnabled(false);
        }else{

            button.setEnabled(true);

        }



    }



}

private class FettListener implements ItemListener{

    @Override
    public void itemStateChanged(ItemEvent arg0) {

        if(fett.isSelected()){

            Font font = inhalt.getFont().deriveFont(Font.BOLD, 15);
            inhalt.setFont(font);

        }else{

            Font font = inhalt.getFont().deriveFont(Font.ITALIC, 15);
            inhalt.setFont(font);

        }


    }



}

}

最佳答案

这是一个关于为什么 null 布局很糟糕的精彩类(class)(你应该停止使用它们)

让我们稍微看一下这些行...

nhalt = new JLabel("TeXt");
inhalt.setBounds(0, 0, 500, 60);
inhalt.setToolTipText("Das ist ein Text");
//...
button = new JButton("HIER");
button.setBounds(100, 10, 100, 50);

因此,标签从 0x0 开始,扩展到 500x60,好的,按钮从 100x10 开始,扩展到 100x50 ,这意味着标签和按钮实际上发生了碰撞

现在,我知道您在想什么,但我在标签后面添加了按钮,但这并不是组件实际绘制/响应事件的方式。

组件的绘制顺序与添加顺序相反,这意味着标签实际上位于按钮上方(就 Z 顺序而言),这也意味着标签在按钮之前接收事件,这一点很重要因为...

inhalt.setToolTipText("Das ist ein Text");

JLabel 上安装一个 MouseListener,它会消耗所有鼠标事件,从而防止按钮收到通知。

所以,长答短,不要使用 null 布局(并花时间更好地理解 API 的实际工作原理:P)

关于java - JButton - 单击动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43101321/

相关文章:

java - 我从基于 Java 的 AWS lambda 处理程序启动一个单独的线程,有时会完成,有时不会,为什么?如何保证线程完成?

java - 如何压缩 URI 图像?

c# - xamarin.forms-页面底部的“滑动”信息框

java - JFrame 每次启动都会推出不同的尺寸

java - 在 JFrame 中绘制 JPanel

java - 尝试通过单击 Jbutton 从另一个类打开新的 Jframe

java - 自定义插件扩展中的嵌套对象

java - AES BadPaddingException

javascript - 带放大/缩小过渡效果的全屏 slider

jquery - Span 仅在动画结束后才从外部 div 中取出