Кнопки по всему окну - Java - PullRequest
       17

Кнопки по всему окну - Java

2 голосов
/ 06 сентября 2011

Я пытаюсь изучать 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 ();"Я должен изменить размер окна, чтобы увидеть кнопки!Большое спасибо за ваше время :) 1009 *

1 Ответ

4 голосов
/ 06 сентября 2011

Не добавляйте компоненты в paintComponent. Этот метод предназначен только для рисования, а не для программной логики или построения графического интерфейса. Знайте, что этот метод вызывается много раз, часто 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); 
  }
}
...