0

我昨天开始 java 编程,并开发了这个。我遇到了一个问题,因为按钮不会调整大小。如果可以,请提供帮助,并在此先感谢您。

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

import javax.swing.*;

class BgPanel extends JPanel {
Image bg = new ImageIcon("C:\\Users\\********\\Pictures\\tiger.jpg").getImage();
@Override
public void paintComponent(Graphics g) {
    g.drawImage(bg, 0, 0, getWidth(), getHeight(), this);
     }
}

public class FrameTestBase extends JFrame {
public static void main(String args[]) {
    JPanel bgPanel = new BgPanel();
    bgPanel.setLayout(new BorderLayout());

    final FrameTestBase t = new FrameTestBase();
    ImageIcon img = new ImageIcon("C:\\Users\\********\\Pictures\\gear-icon.png");
    t.setLayout(null);
    t.setIconImage(img.getImage());
    t.setTitle("Login");
    t.setSize(600,600);
    t.setLocationRelativeTo(null);
    t.setContentPane(bgPanel);
    t.setDefaultCloseOperation(EXIT_ON_CLOSE);
    t.setVisible(true);

    JButton registerButton = new JButton("register");
    registerButton.setBounds(80, 80, 80, 80);
    t.add(registerButton);
         }
     }   
4

3 回答 3

2

我遇到了一个问题,因为按钮不会调整大小。如果可以,请提供帮助,并在此先感谢您。

 bgPanel.setLayout(new BorderLayout());
 // --------- your other code
 t.setLayout(null);
 //--------------- your other code
 t.setContentPane(bgPanel); // you are setting bgPanel which has BorderLayout
 JButton registerButton = new JButton("register");
 registerButton.setBounds(80, 80, 80, 80);
 t.add(registerButton); // t is the JFrame, your main window

AnyJFrame.add(component)本质上会将您的组件添加到 JFrame 的内容窗格中。将布局设置为null您已将bgPanel作为内容窗格添加到 JFrame 后,该 JFrame 将 BorderLayout 作为其布局管理器。将您的按钮添加到内容窗格,即,bgPanel将添加您registerButtonBorderLayout.Center约束。这就是为什么这个按钮会扩展到屏幕的大小。

由于您非常渴望看到输出,请执行以下操作:

    // registerButton.setBounds(80, 80, 80, 80); comment out this line
    registerButton.setPreferedSize(new Dimension(80, 80));
    t.add(registerButton, BorderLayout.PAGE_START)

现在,关于使用 NULL 布局:

在您自己的示例中,您找不到 Button 扩展到窗口大小的原因。在不久的将来,您将看到您的一个组件有头部但由于超出窗口边框而失去了尾部。你会看到你的一个组件会无缘无故地跳过另一个。您将看到您已经更改了组件相对于另一个组件的位置,但它会与其他组件建立关系。好吧,您将能够找到浪费时间的问题并通过设置xxxSize,等来解决setLocationsetBounds但是....

人可以有钱,但不能有时间。

开始学习 LayoutManager:课程:在容器中布局组件

于 2013-10-25T10:25:47.447 回答
1

尝试使用registerButton.setSize(new Dimension(width, height))而不是setBounds. 请记住替换widthheight以获得新值

我忘了说同样的事情人们告诉你:

不要使用空布局。

越早学习越好。
布局并不难,实际上很简单。

于 2013-10-24T17:20:46.630 回答
1

不要使用空布局!!!

Swing 旨在与布局管理器一起使用。别忘了听从迈克的建议。

于 2013-10-24T19:49:31.773 回答