【问题标题】:I couldnt set location of components in Java for usinf JFrame and contentPane?我无法在 Java 中为 usinf JFrame 和 contentPane 设置组件的位置?
【发布时间】:2020-08-02 17:06:22
【问题描述】:

我想用 JFrame 和 contentPane 创建一个简单的个人资料信息页面。我正确添加了所有组件。但我无法设置他们的位置。我该如何设置?我使用了 setBoundary() 方法但它不起作用。

我的 Anket.java 类是:

import java.awt.*;
import javax.swing.*;

 

public class Anket {
    public static void main(String[] args) {
        
        
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(new Dimension(600, 300));
        frame.setTitle("Profile Information");
        
        
        Container contentPane = frame.getContentPane();
        contentPane.setBackground(Color.GRAY);

 

       
        
        JRadioButton rdbtnNewRadioButton = new JRadioButton("Age(10-20)");
        rdbtnNewRadioButton.setBounds(412, 50, 50, 20);
        frame.getContentPane().add(rdbtnNewRadioButton);
        
        JRadioButton rdbtnNewRadioButton_1 = new JRadioButton("Age(21-30)");
        rdbtnNewRadioButton.setBounds(412, 20, 50, 20);
        frame.getContentPane().add(rdbtnNewRadioButton_1);
            
        JRadioButton rdbtnNewRadioButton_2 = new JRadioButton("Age(31-40)");
        rdbtnNewRadioButton.setBounds(412, 30, 50, 20);
        frame.getContentPane().add(rdbtnNewRadioButton_2);
                
        JRadioButton rdbtnNewRadioButton_3 = new JRadioButton("Age(41-50)");
        rdbtnNewRadioButton.setBounds(412, 40, 50, 20);
        frame.getContentPane().add(rdbtnNewRadioButton_3);
        
        JLabel lblNewLabel = new JLabel("PLEASE ENTER YOUR INFORMATION");
        lblNewLabel.setBounds(149, 0, 182, 14);
        frame.getContentPane().add(lblNewLabel);
        
        JLabel lblNewLabel_1 = new JLabel("Enter Your Name");
        lblNewLabel_1.setBounds(127, 25, 86, 14);
        frame.getContentPane().add(lblNewLabel_1);
        
        JLabel lblNewLabel_2 = new JLabel("Enter Your Lastname");
        lblNewLabel_2.setBounds(272, 25, 100, 14);
        frame.getContentPane().add(lblNewLabel_2);
        
        JLabel lblNewLabel_3 = new JLabel("Enter Your Height");
        lblNewLabel_3.setBounds(127, 103, 86, 14);
        frame.getContentPane().add(lblNewLabel_3);
        
        
        
        JTextField textField = new JTextField();
        textField.setBounds(216, 100, 86, 20);
        frame.getContentPane().add(textField);
        textField.setColumns(10);
        
        JTextField textField_1 = new JTextField();
        textField_1.setBounds(127, 48, 86, 20);
        frame.getContentPane().add(textField_1);
        textField_1.setColumns(10);
        
        JTextField textField_2 = new JTextField();
        textField_2.setColumns(10);
        textField_2.setBounds(412, 48, 86, 20);
        frame.getContentPane().add(textField_2);
        

 

        JLabel lblNewLabel_4 = new JLabel(new ImageIcon("C:/Users/PC/eclipse-workspace/Project/src/Berguzar.jpg"));
        lblNewLabel_4.setBounds(10, 21, 100, 85);
        frame.getContentPane().add(lblNewLabel_4);
        
        
        frame.setLayout(new FlowLayout());
        frame.setVisible(true);
    }

 

}

程序没有任何错误。我该如何解决这个问题?

我的输出画面是:

output

【问题讨论】:

  • 你应该使用布局管理器来控制你的边界,而不是 setBounds()。
  • 框架正在使用布局管理器。布局管理器的工作是根据布局管理器的规则设置每个组件的大小/位置。因此, setBounds(...) 语句被忽略。阅读 Layout Managers 上的 Swing 教程部分以获取更多信息和工作示例。您还可以使用不同的布局管理器嵌套面板以实现所需的布局。
  • 另外,当你创建一个 JTextField 时,你使用类似:new JTextField(10)。这将允许文本字段确定其首选大小,以便它可以在需要滚动之前在文本字段中显示 10 个“W”字母。这将使布局管理器更有效地工作。

标签: java swing jframe location layout-manager


【解决方案1】:

你应该替换

Container contentPane = frame.getContentPane();
contentPane.setBackground(Color.GRAY);  

JPanel contentPane = new JPanel(null); // The null is important
contentPane.setBackground(Color.GRAY);
frame.setContentPane(contentPane); // each time you change the content pane you need to revalidate the jframe (frame.setVisible(true) also revalidate the jframe so in this case it is not needed to revalidate the jframe)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多