2 / 2 / 2
Регистрация: 01.10.2012
Сообщений: 91

Контейнер JFrame

29.01.2013, 19:59. Показов 3001. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При добавлении на контейнер сначала одной, а потом другой JPanel'и фокус остается на нижней (что странно).
setFocusable(true) не помогает. Удаление (remove()) нижней панели так же не помогает. Нажатия происходят все равно на копки, лежащие на нижней панели.
Что делать и как бороться?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.01.2013, 19:59
Ответы с готовыми решениями:

Проходил ли кто-то видео-курс techpro? Как у них получилось JFrame в JFrame добавить
Проходил ли кто-то видео-курс techpro? Как у них получилось JFrame в JFrame добавить? http://teachpro.ru/Course/JavaforBeginners...

Как закрыть один JFrame и открыть новый JFrame?
привет подскажите как реализовать. есть отдельный класс с выпадающим меню(там три пункта). есть отдельный класс который рисует фрейм,...

Как сделать Jframe внутри другого JFrame
Доброго времени суток джентльмены и леди. Как сделать так, что бы внутри главного JFrame запустить несколько других...

10
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
30.01.2013, 11:21
Панель не имеет фокуса вообще. Какие еще компоненты кроме кнопок есть?

P.S. Вот интересно, когда научатся свои вопросы сопровождать кодом? Чтобы не приходилось гадать...
0
30.01.2013, 11:56

Не по теме:

Цитата Сообщение от Skipy Посмотреть сообщение
P.S. Вот интересно, когда научатся свои вопросы сопровождать кодом? Чтобы не приходилось гадать...
развиваем предсказание я ясновидение

0
2 / 2 / 2
Регистрация: 01.10.2012
Сообщений: 91
30.01.2013, 17:16  [ТС]
Skipy, я не так выразился. Не кнопки, а лэйбелы. Код полон ерунды не по теме вопроса, поэтому его не привел.

Вот нажатие на JLabel:

Java
1
2
3
4
5
6
7
8
public void mousePressed(MouseEvent e) {
    if(e.getButton()==MouseEvent.BUTTON1){
    System.out.println("Нажатие");
    PrPanel panel2 = new PrPanel(fr, files, way);
    fr.getContentPane().add(panel2);
    fr.validate();
    }
}
На новой панели так же присутствуют лэйбелы с возможностью нажатия. Новую панель видно, ведь она позже добавлена на контейнер. Но на нажатие реагирует та панель, что снизу.
0
 Аватар для Drygba
512 / 454 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
30.01.2013, 17:33
fr это наверно JFrame?
Если да, то какой менеджер раскладки у нее
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
30.01.2013, 18:56
Все равно ничего не понятно. Приведите полный код.

P.S. Нажимать на label вместо кнопки - это мощно...
0
2 / 2 / 2
Регистрация: 01.10.2012
Сообщений: 91
30.01.2013, 19:08  [ТС]
Класс Main (запуск проги)

Java
1
2
3
4
5
6
7
8
9
10
11
12
import javax.swing.JFrame;
 
public class Main {
 
public static void main(String[] args)
{
    PrFrame f = new PrFrame();
    f.setBounds(0, 0, 1100, 800);
    f.setVisible(true);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Класс PackLabel

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
 
 
public class PackLabel extends JLabel implements MouseListener
{
    File files[];
    File file;
    String way, name;
PrPanel panel;
PrFrame fr;
PackLabel(PrFrame ifr, String iname, String iway, PrPanel ipanel){
    super(iname);
    fr = ifr;
    name = iname;
    way = iway;
    panel = ipanel;
    file = new File(way);
    files = file.listFiles();
    addMouseListener(this);
}
 
PackLabel(PrFrame ifr, String iname, String iway, String oldway, PrPanel ipanel){
    super(iname);
    fr = ifr;
    name = iname;
    way = iway;
    file = new File(way);
    panel = ipanel;
    files = file.listFiles();
    addMouseListener(this);
}
 
@Override
public void mouseClicked(MouseEvent arg0) {
    // TODO Auto-generated method stub
    
}
 
@Override
public void mouseEntered(MouseEvent arg0) {
    // TODO Auto-generated method stub
    
}
 
@Override
public void mouseExited(MouseEvent arg0) {
    // TODO Auto-generated method stub
    
}
 
@Override
public void mousePressed(MouseEvent e) {
    // TODO Auto-generated method stub
    if(e.getButton()==MouseEvent.BUTTON1){
    System.out.println("Нажатие");
    PrPanel panel2 = new PrPanel(fr, files, way);
    fr.getContentPane().add(panel2);
    fr.validate();
    }
}
 
@Override
public void mouseReleased(MouseEvent arg0) {
    // TODO Auto-generated method stub
    
}
}
Класс PrFrame

Java
1
2
3
4
5
6
7
8
9
10
11
12
import javax.swing.JFrame;
import javax.swing.JScrollPane;
 
 
public class PrFrame extends JFrame{
    PrPanel panel;
    PrFrame(){
        panel = new PrPanel(this);
        JScrollPane sp = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
getContentPane().add(sp);
    }
}
Класс PrPanel

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.awt.*;
import java.io.*;
import javax.swing.*;
 
 
public class PrPanel extends JPanel {
    String way;
    File files[];
    PrPanel(PrFrame fr){
        setLayout(new GridLayout(0, 1));
        add(new PackLabel(fr,"C:", "C:\\", this));
        add(new PackLabel(fr,"D:", "D:\\", this));
    }
    
PrPanel(PrFrame fr, File ifiles[], String iway){
    way= iway;
    setLayout(new GridLayout(0, 1));
    files = ifiles;
    //try{
for(int m = 0; m < files.length; m++){
    
    if(files[m].isDirectory()){
        //files = files[m].listFiles();
    add(new PackLabel(fr, files[m].getName(), way + files[m].getName() + "\\", this));}
    
 
}
//}catch (Exception e) {}
    
}}
Вот весь код, раз это необходимо. В данный момент мне нужно не достижении цели программы (создание чего-то вроде проводника), а понятие принципов контейнера.

Добавлено через 1 минуту
Drygba, менеджер стоит тот, что по умолчанию. По-моему, это Border
0
 Аватар для Drygba
512 / 454 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
30.01.2013, 20:00
Цитата Сообщение от Kamit Посмотреть сообщение
менеджер стоит тот, что по умолчанию. По-моему, это Border
нет у него (JFrame) по умолчанию менеджера

Добавлено через 4 минуты
хм. похоже ошибся,
Java
1
 new JFrame().getLayout().toString()
выдает java.awt.BorderLayout
укажите явно что и куда добавляете

Добавлено через 18 минут
собственно как и предполагалось, если у вас BorderLayout, то при добавлении на него чего либо без указания конкретной области
Java
1
getContentPane().add(sp);
оно добавляется в центр. вот у вас и видна только одна панель. Укажите явно в какую область добавить элемент
0
2 / 2 / 2
Регистрация: 01.10.2012
Сообщений: 91
30.01.2013, 20:12  [ТС]
Drygba, в смысле?
Вы про BorderLayout.CENTER ?

Мне и нужно, чтобы была видна только верхняя. Я хочу, чтобы она (т.е. JLable'ы на ней) реагировали на нажатие. А не нижняя панель

Добавлено через 11 минут
Может, стоит CardLayout на раму повесить?
0
 Аватар для Drygba
512 / 454 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
30.01.2013, 23:53
Цитата Сообщение от Kamit Посмотреть сообщение
Drygba, в смысле?
немного не понял ваш замысел, сейчас вроде разобрался.
Вы хотите что бы при нажатии на лейб прорисовывались новые лейбы с именем папок которые находятся в той на которую нажали, так?
Если да, то почему бы не чистить фрейм перед тем как на него кидать многой лейбов?

Когда вы добавляете объект в контейнер, он добавляется в конец ArrayList'a(java.util.List<Component> component), который хранит все элементы контейнера. Соответственно те панели что создаются, добавляются за панель которая была создана первой, растяните ваше окно после первого нажатия на один из лейбов, увидете новую панель за первой (можете еще добавить рамку к лейбу для наглядности).

Может немного не понятно объяснил, просто не хватает опыта (можете сами просмотреть исходники), или может Skipy, объяснит на пальцах. Не стоит кидать всю эту мусорку в одну точку и ждать что оно отрисуется нормально.
У вас есть два варианта:
1. Добавляйте новую панель первой в ArrayList, класс PackLabel,
Java
1
2
3
4
5
6
 if(e.getButton()==MouseEvent.BUTTON1){
            System.out.println("Нажатие");
            PrPanel panel2 = new PrPanel(fr, files, way);
            fr.add(panel2, 0);//добавляем новую панель на нулевое место
            fr.validate();
        }
2. Удалять все с фрейма перед добавлением новой панели, класс PrPanel
Java
1
2
3
4
5
6
7
8
9
10
11
12
PrPanel(PrFrame fr, File ifiles[], String iway) {
        fr.getContentPane().removeAll();//чистим все
        way = iway;
        setLayout(new GridLayout(0, 1));
        files = ifiles;
        for (int m = 0; m < files.length; m++) {
 
            if (files[m].isDirectory()) {
                add(new PackLabel(fr, files[m].getName(), way + files[m].getName() + "\\", this));
            }
        }
    }
p.s. методы JFrame.getContentPane().add и JFrame.add одинаковы сейчас, смысла писать через getContent нет
1
2 / 2 / 2
Регистрация: 01.10.2012
Сообщений: 91
01.02.2013, 11:41  [ТС]
Drygba, спасибо, теперь реагирует как нужно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.02.2013, 11:41
Помогаю со студенческими работами здесь

JFrame
У меня есть две панели в которых я произвожу размещение элементов и я хочу между ними переключаться (одну скрывать другую выводить) ...

JFrame
Подскажите, будьте добры.. есть 2 фрейма. один - класс MainClass (frame), второй - ListenerAdd (frame1). обработчик события кнопки...

JFrame
Привет... Ответьте пожалуйста на вопросик. Вот например в NetBeans'е я создал пример формы приложения, так какой переменной там обозначено...

JFrame и БД
Доброго времени суток. И так, такая проблема. Есть код который Выводит базу данных в таблицу, проблема в том что код не мой, и не могу...

JFrame
У меня есть ResultSet данных из базы MySQL. При помощи чего вывести данные в графическом интерфейсе. Если выводить их в Lable, то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru