Java 计算器:在TestJFrame类中,只有当鼠标悬停在按钮上方时,按钮才会显示
我在赶时间,所以idc担心复制品。我仍在努力学习Java及其术语,直到本学期结束。我使用了一个模板。我使用的是背景图像(“面板”),这使一切变得复杂 基本上,按钮只有在我将鼠标悬停在上面时才会显示。显然,这与JPanel有关。 我排除了您可能会要求的代码,希望这次有人能帮助我,因为我的按钮与我在其他推荐帖子中看到的按钮不同 另外,我是否可以将JFrame设置为固定大小(测试类代码中的大小)? 代码可能是多余的,但我只是想让一切正常。请记住,我是Java新手 测试等级:Java 计算器:在TestJFrame类中,只有当鼠标悬停在按钮上方时,按钮才会显示,java,jpanel,jbutton,calculator,Java,Jpanel,Jbutton,Calculator,我在赶时间,所以idc担心复制品。我仍在努力学习Java及其术语,直到本学期结束。我使用了一个模板。我使用的是背景图像(“面板”),这使一切变得复杂 基本上,按钮只有在我将鼠标悬停在上面时才会显示。显然,这与JPanel有关。 我排除了您可能会要求的代码,希望这次有人能帮助我,因为我的按钮与我在其他推荐帖子中看到的按钮不同 另外,我是否可以将JFrame设置为固定大小(测试类代码中的大小)? 代码可能是多余的,但我只是想让一切正常。请记住,我是Java新手 测试等级: public class
public class TestCalculator {
public static void main(String[] args) {
JFrame frame = new JFrame(TestCalculator.class.getSimpleName());
ImagePanel panel = new ImagePanel(new ImageIcon("01_Crane_AGweb.jpg").getImage());
SimpleArithmeticCalculator calc = new SimpleArithmeticCalculator();
calc.SetColors(null , Color.white , new Color(72,61,139));
calc.setVisible(true);
calc.setOpaque(false);
panel.setVisible(true);
panel.setOpaque(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
calc.add(panel);
frame.add(panel);
frame.add(calc);
frame.getContentPane().add(calc);
frame.setPreferredSize(new Dimension(358,379));
frame.setMinimumSize(new Dimension(358,379));
frame.setVisible(true);
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
}
}
class ImagePanel extends JPanel {
private Image img;
public ImagePanel(String img) {
this(new ImageIcon(img).getImage());
}
public ImagePanel(Image img) {
this.img = img;
Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
this.setPreferredSize(new Dimension(size));
this.setMinimumSize(new Dimension(size));
this.setMaximumSize(new Dimension(size));
this.setSize(new Dimension(size));
this.setLayout(null);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, 0, 0, this.getWidth(),this.getHeight(),this);
}
}
主要内容:
公共类SimpleArtimeticCalculator扩展JPanel实现ActionListener{
//按钮SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS!
...
//jpanel、按钮、字体、值等
公共SimpleMaterialCalculator(){
超级();
//我认为这就是问题所在:
buttonPanel.setForeground(空);
textPanel.setForeground(空);
设置前景(null);
setLayout(新的GridLayout(0,1,0,0));
buttonPanel.setLayout(新的GridLayout(0,5,5,5));
displayText=新的JTextField(“,20);
displayText.setHorizontalAlignment(JTextField.RIGHT);
displayText.setFont(字体);
displayText.setEditable(false);
textPanel.add(显示文本);
按钮=新的JButton[NUM_按钮];
对于(int i=0;i
这是你的问题
您已经在面板之前创建并显示了calc,并且在框架之前显示了面板
calc.setVisible(true); <------------Visible first
calc.setOpaque(false);
panel.setVisible(true); <----Second
panel.setOpaque(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
calc.add(panel);
frame.add(panel);
frame.add(calc);
frame.getContentPane().add(calc);
frame.setPreferredSize(new Dimension(358,379));
frame.setMinimumSize(new Dimension(358,379));
frame.setVisible(true); <---Third
calc.setVisible(true) 这是你的问题
您已经在面板之前创建并显示了calc,并且在框架之前显示了面板
calc.setVisible(true); <------------Visible first
calc.setOpaque(false);
panel.setVisible(true); <----Second
panel.setOpaque(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
calc.add(panel);
frame.add(panel);
frame.add(calc);
frame.getContentPane().add(calc);
frame.setPreferredSize(new Dimension(358,379));
frame.setMinimumSize(new Dimension(358,379));
frame.setVisible(true); <---Third
calc.setVisible(true) 不需要创建图像面板类。您可以使用JLabel显示图像图标
frame.pack(); // this is the problem, invoke after all the components have been added
calc.add(panel);
frame.add(panel);
frame.add(calc);
frame.getContentPane().add(calc);
frame.setPreferredSize(new Dimension(358,379));
frame.setMinimumSize(new Dimension(358,379));
frame.setVisible(true);
如果我不得不胡乱猜测的话,我会说问题是在将所有组件添加到框架之前,您使用的是frame.pack()
calc.setVisible(true); <------------Visible first
calc.setOpaque(false);
panel.setVisible(true); <----Second
panel.setOpaque(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
calc.add(panel);
frame.add(panel);
frame.add(calc);
frame.getContentPane().add(calc);
frame.setPreferredSize(new Dimension(358,379));
frame.setMinimumSize(new Dimension(358,379));
frame.setVisible(true); <---Third
创建框架的基本代码应为:
// Create all the panel and add all the components to the panels
JPanel panel = new JPanel();
panel.add(..);
// Create the frame and add all the panels to the frame.
JFrame frame = new JFrame(...);
frame.add( panel ;
frame.pack();
frame.setVisible(true);
更新:
另一个问题可能与以下代码有关:
frame.add(panel);
frame.add(calc);
默认情况下,框架使用边框布局。将构件添加到框架时,默认情况下,构件将添加到中心,问题是一次只能将单个构件添加到中心。看起来您正在尝试创建背景图像。如果是这种情况,那么正如我前面所建议的,您可以使用JLabel作为背景。您的代码应该类似于:
JLabel background = new JLabel( new ImageIcon(...) );
background.setLayout( new BorderLayout() );
SimpleArithmeticCalculator calc = new SimpleArithmeticCalculator();
background.add( calc );
JFrame frame = new JFrame(...);
frame.add( background );
frame.pack();
frame.setVisible( true );
现在,计算器将显示在背景的顶部。或者,如果仍要使用ImagePanel,则概念仍然相同,可以将计算器添加到图像面板,将图像面板添加到框架。无需创建图像面板类。您可以使用JLabel
calc.setVisible(true); <------------Visible first
calc.setOpaque(false);
panel.setVisible(true); <----Second
panel.setOpaque(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
calc.add(panel);
frame.add(panel);
frame.add(calc);
frame.getContentPane().add(calc);
frame.setPreferredSize(new Dimension(358,379));
frame.setMinimumSize(new Dimension(358,379));
frame.setVisible(true); <---Third