Java JButton-无单击信息
我读了一些关于这方面的文章,但没有任何帮助。 我试着用gui做一个小应用程序, 但问题是,如果我点击按钮,不会出现动画,也不会发生任何事情。我希望你能帮助我。 这就是代码:Java JButton-无单击信息,java,animation,jframe,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; StartF
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
布局很糟糕(你应该停止使用它们)
让我们看一下这些线
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
layouts(并且花时间更好地理解API实际上是如何工作的:p)