不同的窗口使用相同的代码?

时间:2012-04-27 15:41:43

标签: java swing

这是“主”类(不包含主方法)

import javax.swing.*;
import java.awt.*;
//import java.lang.Object;
//import java.awt.event.ActionListener;
//import java.awt.event.;

public class Program {

  public JFrame frame;
  public JPanel header;
  public JPanel text;
  public JPanel body;
  public JTextField input;
  public JButton agregar;

  public List listA;
  public List listB;

  public Program(String title) {
    frame = new JFrame(title);
    frame.setSize(500,600);
    frame.setResizable(false);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(null);

    header = new JPanel();
    header.setBackground(new Color(255,204,50));
    header.setBounds(0,0,500,100);

    text = new JPanel();
    text.setBackground(new Color(255,204,100));
    text.setBounds(0,100,500,50);
    text.setLayout(null);

    //Inicializando la "entrada"
    input = new JTextField(20);
    input.setBounds(50,13,300,25);
    text.add(input);

    agregar = new JButton();
    agregar.setBounds(360,12,80,25);
    agregar.setText("Agregar");
    text.add(agregar);
    //Listo

    body = new JPanel();
    body.setBackground(new Color(255,204,150));
    body.setBounds(0,150,500,450);

    //Lo que está dentro del body
    listA = new List(20);
    body.add(listA);

    listB = new List(20);
    body.add(listB);
    //Listo

    //Añadir todos los paneles al frame principal
    frame.add(header);
    frame.add(text);
    frame.add(body);

  }
}

这是MAIN类(这个包含主要方法):

public class Main {
  public static void main(String[] args) {
    new Program("Ordenamiento Recursivo");
  }
}

每次运行应用程序时,UI组件的显示方式都不同,请参阅随附的屏幕截图。


好吧,感谢所有回复帖子的人,我完成了程序,我对最终结果非常满意,现在是:

Programa para Moquillaza

如果有人想查看代码,请点击此处:Link

4 个答案:

答案 0 :(得分:5)

问题:

  • 您在JFrame 之前致电setVisible(true) 添加组件,这将导致您的程序图形绘制不可靠,这也是您看到不同的原因结果。不要这样做,而是在之后将它全部添加到顶级窗口中,然后将其命名为
  • 正如其他人所说,阅读并学会使用布局管理器。

答案 1 :(得分:4)

  

具有相同代码的不同窗口?

答案 2 :(得分:4)

确保在EDT上构建GUI。不这样做会导致不可预测的结果。

使用布局添加组件后调用pack()然后调用setVisible(true)

答案 3 :(得分:2)

您需要一个表单的布局管理器,因此将布局管理器设置为null不是要做的事情。

此处正在进行中...... https://gist.github.com/2510570

一些变化。尚未完成,但请查看以下内容

  1. 让程序扩展JFrame。
  2. 设置了布局管理器。
  3. 更新 最后,我在IntelliJ的表单设计器中敲了这个。

    https://gist.github.com/2512197

    您希望将行为附加到按钮的位置搜索要求您添加代码的注释的代码。虽然我在InteliJ Ultimate(这个花钱)这样做了,但我认为免费下载Community Edition UI设计器也可以绘制Swings GUI。非常快速和容易。 Netbeans也有一个很好的GUI画家。

    oracle.com上的Swing教程值得回顾。