Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Не устанав.: bg, size, location,... для JComponent


Автор: AlbertoTimakov 1.4.2013, 20:30
Здравствуйте! Я новичок в java. Мне нужно сделать компонент, который, я смог бы потом добавлять на фрейм, который имел бы обработчик события - обработка клика мыши - меняется цвет компонента с одного на другой.

Написал вот что:

Код

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

public class MyFrameTest{
 public static void main(String [] args){
  MyFrame frame = new MyFrame();
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setVisible(true);
 }
}

class MyFrame extends JFrame{
 public MyFrame(){

  Toolkit kit = Toolkit.getDefaultToolkit();
  Dimension dem = kit.getScreenSize();

  this.width = dem.width;
  this.height = dem.height;
  this.setBounds(this.width / 4, this.height / 4,this.width / 2, this.height / 2);
  this.setBackground(Color.BLUE);

  Container contentPane = this.getContentPane();
  component = new MyComponent();
  contentPane.add(component);  

 }
 private int width;
 private int height;
 private MyComponent component;
}

class MyComponent extends JComponent{
 public void paintComponent(Graphics g){
  super.paintComponent(g);//непонял
  g.drawString("text", text_x, text_y);
 }
  public MyComponent(){
  this.setOpaque(true);// непонял
  this.setSize(100,100);//не работает
  this.setLocation(100,100);//не работает
  this.setBackground(Color.BLUE);//не работает
  this.setForeground(Color.GREEN);// работает
 }
 public static final int text_x = 50;
 public static final int text_y = 50;
}



JComponent:

- Не устанавливается расположение компонента относительно фрейма через setLocation(,)
- Не устанавливается размер через setSize(100,100);
- Не устанавливается цвет фона компонента через setBackgound(Color color);

- Но устанавливается цвет текста.



JFrame:

- Не устанавливается цвет фона через setBackgound(Color color); - Работает, если поставить в JComponent, this.setOpaque(true); Т.е.:

Код

class MyFrame extends JFrame{
 public MyFrame(){
  //...
  this.setBackground(Color.BLUE);

  Container contentPane = this.getContentPane();
  component = new MyComponent();
  contentPane.add(component);  
 }
 //...
}

class MyComponent extends JComponent{
 public void paintComponent(Graphics g){
  //...
 }
  public MyComponent(){
  this.setOpaque(true);// непонял
  //...
 }
 //...
}


Причем, если убрать добавляемый компонент с формы, то никакой закраски формы не происходит...

- Как закрасить форму унаследованной от JFrame
- Как изменить параметры Location, size и Background компонента унаследованного от JComponent
- Как правильно сделать что-то вроде контрола в Java? И есть ли такое понятие в Java?

Помогите пожалуйста разобраться!


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)