2012-04-27 48 views
1

这是“主”类(不包含的主要方法)不同的窗口具有相同的代码?

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); 

    } 
} 

这是主类(这其中包含的主要方法):

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

每次我运行应用程序,UI组件呈现不同,请参阅附加的屏幕截图。


好,感谢大家谁回答后,我完成了计划,我很高兴与最终的结果,那就是:

Programa para Moquillaza

如果有人想看看代码,这里是:Link

+0

这里是发生了什么事情的PIC:https://fbcdn-sphotos-a.akamaihd.net/hphotos-ak-ash3/s720x720/542011_351231484935185_100001450101764_1038411_1654559456_n.jpg – hinafu 2012-04-27 15:43:40

+0

什么问题?每次你运行它你会得到新的窗口?当然,你会开始一个新的过程。 – BeRecursive 2012-04-27 15:44:52

+2

你可能会尝试在你的问题中加一点__更多的努力(尽管英语不好) - 很难弄清楚你得到了什么,你期望什么,从而可能会出错。你有没有尝试和调试你的应用程序? – Thomas 2012-04-27 15:44:56

回答

5

问题:

  • 你对你的JFrame电话setVisible(true)添加组件,这将导致你的程序的图形不可靠的图纸,这就是为什么你看到不同的结果。不要这样做,而是在之后将其称为,您已将所有内容添加到顶层窗口。
  • 正如其他人所说,阅读并学习使用布局管理器。
4

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

+0

你的意思是我必须实现CardLayout或者我不应该实现CardLayout?我将Layout设置为null:'frame.setLayout(null);' – hinafu 2012-04-27 15:47:44

+2

@hinafu我认为你必须实现'CardLayout'并且不要设置'frame.setLayout(null);'JFrame默认实现了BorderLayout,然后你可以调用(通过控制CardLayout)'frame.add(myCards );' – mKorbel 2012-04-27 15:51:54

2

您将需要一个布局管理器为您的窗体,因此设置布局管理器为空不是要做的事情。在这里进步

工作... https://gist.github.com/2510570

夫妇的变化。还没有完成,但看看下面的内容

  1. 程序扩展JFrame。
  2. 已经设置了布局管理器。

更新 最后我在IntelliJ的表单设计器中敲掉了它。

https://gist.github.com/2512197

如果要附加行为的按钮搜索通过代码,询问您是否添加代码中的注释。尽管我在InteliJ Ultimate(这个花费成本)中这样做了,但我认为免费下载Community Edition UI设计器也可以绘制Swings GUI。非常快速和容易。 Netbeans也有一个很好的GUI画家。

关于oracle.com的Swing教程也值得一读。

+1

*“我会在接下来的30分钟内提供一个例子。”* tick .. tick .. tick ..是否可以免费获得我的比萨饼呃..例子? ;) – 2012-04-27 16:27:24

+0

我会给你一个披萨,一个比萨我的脑海!大声笑;) – 2012-04-27 16:29:46

+1

@Rob一与奥利瓦斯,奶酪和spargla请:-) – mKorbel 2012-04-27 17:06:14

4

一定要在EDT上构建GUI。不这样做可能会导致不可预知的结果。

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

相关问题