整个窗口的按钮 - Java

时间:2011-09-06 13:06:43

标签: java swing button jframe

我正在尝试学习java,我正在练习一个带有2个简单按钮的简单程序。这是我的代码:

 import javax.swing.*;

public class Main {

    public static void main(String[] args) {

    JFrame frame = new JFrame("Askhsh 3");    
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    ColorJPanel application = new ColorJPanel();
    frame.add(application);
    frame.setSize(500,500);
    frame.setVisible(true);

    }

}

类ColorJPanel:

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


public class ColorJPanel extends JPanel{

    public void paintComponent(Graphics g)
    {
    super.paintComponent(g);
    this.setBackground(Color.WHITE);

    JButton arxikopoihsh = new JButton("Αρχικοποίκηση");

    JButton klhrwsh = new JButton("Κλήρωση");

    add(arxikopoihsh);
    add(klhrwsh);    

    this.revalidate();
    this.repaint();

    }
}

正如你所看到的,我现在唯一想做的就是放置2个简单的按钮,什么也不做!这是我的输出: http://imageshack.us/photo/my-images/847/efarmogh.jpg/ 当我运行应用程序时,我看到按钮填满了窗口! 请注意,如果我删除“this.revalidate();”命令我必须调整窗口大小才能看到按钮! 非常感谢您的时间:)

1 个答案:

答案 0 :(得分:4)

不要在paintComponent中添加组件。此方法仅用于绘制,不适用于程序逻辑或构建GUI。知道这个方法被多次调用,通常由JVM调用,并且大多数时候这是你无法控制的,并且也知道当你要求通过repaint()方法调用它时,这只是一个建议,油漆经理有时可能会选择忽略您的请求。 paintComponent方法必须精简且快速,因为任何减慢它的速度都会降低应用程序的感知响应速度。

在你当前的代码中,我甚至没有看到需要覆盖paintComponent方法,所以除非你需要它(如果做组件的自定义绘制),我建议你摆脱这种方法(以及重新绘制和重新验证的调用。相反,在类的构造函数中添加组件,并确保在添加组件之后和调用setVisible(true)之前打包顶级容器。最重要的 - 阅读Swing教程,因为这些都包含在内。

如,

Main.java

import javax.swing.*; 

public class Main { 

  public static void main(String[] args) { 

    JFrame frame = new JFrame("Askhsh 3"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    ColorJPanel application = new ColorJPanel(); 
    frame.add(application); 
    frame.pack();
    frame.setVisible(true); 
  } 
}

ColorJPanel.Java

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

public class ColorJPanel extends JPanel{ 
  public static final int CJP_WIDTH = 500;
  public static final int CJP_HEIGHT = 500;

  public ColorJPanel()  { 
    this.setBackground(Color.WHITE); 
    JButton arxikopoihsh = new JButton("Αρχικοποίκηση"); 
    JButton klhrwsh = new JButton("Κλήρωση"); 
    add(arxikopoihsh); 
    add(klhrwsh); 
  } 

  // let the component size itself
  public Dimension getPreferredSize() {
    return new Dimension(CJP_WIDTH, CJP_HEIGHT); 
  }
}