这个jframe代码中的错误是什么

时间:2014-07-20 18:59:26

标签: java swing jframe jpanel jbutton

大家好我正在尝试创建自己的计算器,我的图形部分有问题... 我创建了一个标签和一个按钮,我将其设置在标签中。他们出现但我不能设置他们的位置是什么问题? 谢谢你的帮助

import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class calc extends JFrame {

    public calc(String string) {

        this.setResizable(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("calculator");
        this.setPreferredSize(new Dimension(300, 400));

        JButton button1 = new JButton("calculate");
        button1.setBackground(Color.cyan);
        button1.setLocation(200, 100);
        button1.setPreferredSize(new Dimension(100, 20));

        JLabel label1 = new JLabel();
        label1.setText(main.main.text); // main.main.text is a text in main class it works XD

        JPanel panel1 = new JPanel();
        panel1.add(label1);
        panel1.add(button1);
        panel1.setPreferredSize(new Dimension(300, 400));
        this.getContentPane().add(panel1);

        this.pack();
        panel1.setVisible(true);
        button1.setVisible(true);
        label1.setVisible(true);

    }
}

1 个答案:

答案 0 :(得分:-1)

Swing不允许您设置对象的位置,因为它使用layout managers管理GUI的布局。如果您真的希望自己设置布局,可以使用frame.getContentPane().setLayout(null);(或者在您的情况下getContentPane().setLayout(null),因为您的类已经扩展JFrame

然后您可以使用setSizesetLocation方法。但是,这是一个糟糕的想法。以下是java文档中关于null layoutManagers的内容:

  

虽然我们强烈建议您使用布局管理器,但您可以在没有它们的情况下执行布局。       通过将容器的布局属性设置为null,可以使容器不使用layoutmanager       使用这种称为绝对定位的策略,您必须指定每个策略的大小和位置       该容器内的组件。绝对定位的一个缺点是它不能调整       当顶层容器调整大小时。它也不能很好地适应两者之间的差异       用户和系统,例如不同的字体大小和区域设置。