Родительские и дочерние окна

Модератор: Absurd

Gugle
Сообщения: 22
Зарегистрирован: 17 май 2006, 18:18
Откуда: Москва
Контактная информация:

Если можно, пример. В классе

Код: Выделить всё

public class MyInternalFrame extends JInternalFrame
имеется JLabel и JButton. Создали несколько окон, как при нажатии на JButton в одном окне передать в JLabel, например первого окна имена всех созданных окон (или тех что setVisble(true)).

Код: Выделить всё

import javax.swing.JInternalFrame;

import java.awt.event.*;
import java.awt.*;

public class MyInternalFrame extends JInternalFrame {
    
    // Дополнительные переменные для класса
    static int openFrameCount = 0;
    static final int xOffset = 30, yOffset = 30;
    
    // Конструктор класса
    public MyInternalFrame() {
        super("Document #" + (++openFrameCount), 
              true, 
              true, 
              true, 
              true);
        
        initComponents();
        setName(Integer.toString(openFrameCount));

        System.out.println();
        

        setSize(200, 100); 
        setVisible(true);


        setLocation(xOffset*openFrameCount, yOffset*openFrameCount);
    }
    
    // Создание компонентов и построение формы
    private void initComponents() {
        buttonOK = new javax.swing.JButton();
        labelNames = new javax.swing.JLabel();
        
        getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        
        buttonOK.setText("Button");
        getContentPane().add(buttonOK, new org.netbeans.lib.awtextra.AbsoluteConstraints(5, 40, 100, 25));
        buttonOK.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                buttonOKActionPerformed(evt);
            }
        }); 
        
        labelNames.setText("Label");
        getContentPane().add(labelNames, new org.netbeans.lib.awtextra.AbsoluteConstraints(5, 10, 150, 20));
        pack();
    }
    
    // Даействия
    private void buttonOKActionPerformed(java.awt.event.ActionEvent evt) {
       //Действие при нажатии. Что сюда нужно вписать?
        
    }
    
    // Инициализация компонентов
    javax.swing.JButton buttonOK;
    javax.swing.JLabel labelNames;
}
Заранее благодарен!
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

Код: Выделить всё

JDesktopPane desktop = new JDesktopPane();

...

JInternalFrame[] frames = desktop.getAllFrames();

System.out.println(frames[i].getTitle() + " " + frames[i].isVisible());
++
internalFrame.getDesktopPane();


http://java.sun.com/j2se/1.5.0/docs/api ... Frame.html
http://java.sun.com/j2se/1.5.0/docs/api ... pPane.html
Gugle
Сообщения: 22
Зарегистрирован: 17 май 2006, 18:18
Откуда: Москва
Контактная информация:

Oscar, для тех кто в танке поясни пожалуйста!!! :?

Как обратится к компоненту JLabel на созданном JInternalFrame-е?
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

Gugle, вежливо и по имени ...

в вышеуказанном примере - labelNames:

Код: Выделить всё

private void buttonOKActionPerformed(java.awt.event.ActionEvent evt) {
System.out.println("гениальное, однако, название переменной" + labelNames.getText());
}
Gugle
Сообщения: 22
Зарегистрирован: 17 май 2006, 18:18
Откуда: Москва
Контактная информация:

Oscar.

Не считать текст в текушем JLabel-е, а при клике в любом из созданных окон на кнопку, записать в JLabel именно первого окна текст. Что нибуть типа:

Код: Выделить всё

private void buttonOKActionPerformed(java.awt.event.ActionEvent evt) { 
frames[1].labelNames.setText("Гениально.");
} 
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

вдох - выдох ...

Код: Выделить всё

...

private void buttonOkActionPerformed(ActionEvent e) {

	JDesktopPane desktop = this.getDesktopPane();
	JInternalFrame[] frames = desktop.getAllFrames(); 
	frames[0].getLabel().setText("test");

}

public JLabel getLabel() {

	return labelNames;

}

...

Gugle
Сообщения: 22
Зарегистрирован: 17 май 2006, 18:18
Откуда: Москва
Контактная информация:

Что "вдох", что "выдох"...
Не компилится и все!!!

Говорит что методa getLabel нету!
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

Gugle, а метод getLabel() в своём последнем посте я от фонаря, по твоему, написал ???
Gugle
Сообщения: 22
Зарегистрирован: 17 май 2006, 18:18
Откуда: Москва
Контактная информация:

Oscar, я понимаю что именно этот метод должна вернуть строка

Код: Выделить всё

frames[0].getLabel().setText("test");
Однако этого не происходит.
Gugle
Сообщения: 22
Зарегистрирован: 17 май 2006, 18:18
Откуда: Москва
Контактная информация:

Oscar и потом метод getLabel() переопределяется у MyInternalFrame. Мы получаем от desktopPane массив JInternalFrame, а класс в котором мы работаем MyInternalFrame. Переписал последнюю строку с инменованным классом

Код: Выделить всё

((MyInternalFrame)frames[0]).getLabel().setText("TEST");
, компилятор проглотил однако текст "setText()" всеравно передается в JLabel не первого окна, а в текущее активное окно.
Ответить