gpt4 book ai didi

Java:在 AbsoluteLayout 中,JButton 在鼠标进入之前不会显示

转载 作者:行者123 更新时间:2023-12-01 16:50:22 25 4
gpt4 key购买 nike

我已将我的 Layout 切换为 AbsoluteLayout 并且所有内容都已就位,但是当我运行程序时,我的 JButtons 是不可见的,直到我将鼠标悬停在它们上面。我应该更改什么以使它们始终可见,无论是否输入鼠标?

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import java.awt.Color;
import java.awt.Cursor;

public class Library extends JFrame implements ActionListener, MouseListener {

private JFrame jf1;
private JPanel jp1;
private JTextField jtf1;
private JTextField jtf2;
private JTextField jtf3;
private JButton jb1;
private JButton jb2;
private JButton jb3;

public Library() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch(Exception ee) {
ee.printStackTrace();
}
JFrame.setDefaultLookAndFeelDecorated(false);
jf1 = new JFrame("Library");
jf1.setVisible(true);
jf1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf1.setSize(1080, 900);
jf1.setResizable(true);
jf1.getContentPane().setLayout(null);

Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
jf1.setLocation(dim.width/2-jf1.getSize().width/2, dim.height/2-jf1.getSize().height/2);

jp1 = (JPanel) jf1.getContentPane();

jb1 = new JButton("Genre");
jb1.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
jb1.setBounds(345, 11, 150, 60);
jb1.addActionListener(this);

jb2 = new JButton("Author");
jb2.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
jb2.setBounds(494, 11, 150, 60);
jb2.addActionListener(this);

jb3 = new JButton("Title");
jb3.setDefaultCapable(false);
jb3.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
jb3.setBounds(643, 11, 150, 60);
jb3.addActionListener(this);

jtf2 = new JTextField("Enter Text");
jtf2.setBounds(445, 292, 200, 20);
jtf2.addMouseListener(this);
jtf2.setVisible(false);

jtf3 = new JTextField("Enter Text");
jtf3.setBounds(671, 351, 200, 20);
jtf3.addMouseListener(this);
jtf3.setVisible(false);

jp1.add(jtf2);

jtf1 = new JTextField("Enter Text");
jtf1.setBounds(236, 230, 200, 20);
jtf1.addMouseListener(this);
jtf1.setVisible(false);

jp1.add(jtf1);
jp1.add(jtf3);
jp1.add(jb1);
jp1.add(jb2);
jp1.add(jb3);

jf1.validate();
}

@Override
public void actionPerformed(ActionEvent e) {
Object code = e.getSource();
if (code == jb1) {
jtf1.setVisible(true);
jp1.validate();
}
else if (code == jb2) {
jtf2.setVisible(true);
jp1.validate();
}
else if (code == jb3) {
jtf3.setVisible(true);
jp1.validate();
}
}

public static void main(String[] args) {
Library shoe = new Library();
}

@Override
public void mouseClicked(MouseEvent eee) {
Object mouseCode = eee.getSource();
if(mouseCode == jtf1) {
jtf1.selectAll();
}
if(mouseCode == jtf2) {
jtf2.selectAll();
}
if(mouseCode == jtf3) {
jtf3.selectAll();
}
}

@Override
public void mouseEntered(MouseEvent eee) {}

@Override
public void mouseExited(MouseEvent eee) {}

@Override
public void mousePressed(MouseEvent eee) {}

@Override
public void mouseReleased(MouseEvent eee) {}

}

最佳答案

您的程序中存在多个错误:

  1. 您使用的 AbsoluteLayout 最终它仍然是一个 null 布局,请参阅 Null layout is evilWhy is it frowned upon to use a null layout in Swing? 。虽然绝对定位似乎是为 Swing 初学者制作复杂 GUI 的最快、最简单的方法,但您在程序中进步得越多,因此出现的错误就越多。而是使用 Layout Manager或它们的组合以及 Empty borders如果需要额外的间距。

  2. 您正在创建一个 JFrame 对象并扩展 JFrame,换句话说,使您的类成为 JFrame!如果您确实需要扩展JPanel(可以稍后添加到其他组件中,而JFrame则不能),则无需扩展JFrame .

  3. 在将所有组件添加到其中之前,您要使 JFrame 可见,这就是错误的原因,也可能是第一个错误。您应该仅在将所有组件添加到其中后才使其可见。

关于Java:在 AbsoluteLayout 中,JButton 在鼠标进入之前不会显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41306328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com