С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
1 / 1 / 0
Регистрация: 20.10.2010
Сообщений: 61
1

Отдельный класс для всех панелей - такое возможно?

31.08.2013, 00:14. Показов 1410. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Мне необходимо добавить несколько панелей в окно. Очень хочется вынести код по панелям в отдельный класс. Только я не знаю как это правильно реализовать. Возможно ли такое вообще? И как создавать объекты нужной мне панели, если в 1 классе можно написать 1 конструктор?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.08.2013, 00:14
Ответы с готовыми решениями:

Вывод всех команд для сервера в отдельный класс
Есть множество команд сервера, запрос которых выглядит следующим образом: "Имя команды" + IPacket...

Перенос всех вывод в консоли из Main в отдельный класс Menu
Всем привет! Помогите, пожалуйста, в новый класс "Menu" добавить все выводы на консоль, убрав их из...

Как изменить цвет всех lable на форме через отдельный класс
Суть проблемы в том, что не знаю как изменить цвет ForeColor для lable расположенном на форме из...

Выполнить замену всех символов в строке на первый отдельный символ, а всех пробелов в строке на второй отдельный символ
Задана строка текста длинной не менее двадцати символов и заданы два отдельных символа.Выполнить...

6
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12832 / 7569 / 1764
Регистрация: 25.07.2009
Сообщений: 13,965
31.08.2013, 03:16 2
Juggle, создайте класс наследник от JPanel, в его конструкторе напихайте в него всего, что хочется, и его объект в главное окно поместите...
1
1 / 1 / 0
Регистрация: 20.10.2010
Сообщений: 61
31.08.2013, 21:52  [ТС] 3
easybudda, спасибо, буду пробовать.
И еще ради интереса, подскажите так вообще делают? Считается это хорошим кодингом вот так выносить ГУИ по отдельному типу компонент (в моем случае все панели) в отдельный класс или лучше так не делать, т.к. чревато проблемами (какими?)? Или нет единого мнения по этому вопросу?
0
3 / 3 / 1
Регистрация: 11.04.2011
Сообщений: 121
01.09.2013, 14:28 4
Juggle,
Я лишь отдаленно знаком с хорошим кодом, но ИМХО правильно когда все разбито логически.
На Вашем месте, надо разумно разбить все на части. И, естественно, панель отдельным классом, это очень удобно.
В первую очердь тем, что читабельно.
1
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
02.09.2013, 09:42 5
Цитата Сообщение от Juggle Посмотреть сообщение
И как создавать объекты нужной мне панели, если в 1 классе можно написать 1 конструктор?
Кто Вам это сказал? Конструкторов может быть до 65535, если мне не изменяет память. В любом случае больше одного конструктора присутствует в большинстве классов.
0
1 / 1 / 0
Регистрация: 20.10.2010
Сообщений: 61
03.09.2013, 00:07  [ТС] 6
Это вы видимо говорите о перегрузке конструкторов, но у меня нет необходимости передавать различные наборы входных данных. Даже если я буду писать фэйковые вх переменные, то мне кажется что это будет только путать код.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12832 / 7569 / 1764
Регистрация: 25.07.2009
Сообщений: 13,965
03.09.2013, 17:31 7
Juggle, вот Вам незатейливый примерчик, может пригодится...
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
package easybudda.examples.mypropertiesdialog;
 
import java.awt.Color;
 
public class MyProperties {
    private Color skin;
    private int growth;
    private int weight;
    
    public MyProperties(Color skin, int growth, int weight) {
        this.skin = skin;
        this.growth = growth;
        this.weight = weight;
    }
    
    public MyProperties(MyProperties another) {
        this.skin = another.getSkin();
        this.growth = another.getGrowth();
        this.weight = another.getWeight();
    }
    
    public void setSkin(Color skin) {
        this.skin = skin;
    }
    public Color getSkin() {
        return this.skin;
    }
    
    public void setGrowth(int growth) {
        this.growth = growth;
    }
    public int getGrowth() {
        return this.growth;
    }
    
    public void setWeight(int weight) {
        this.weight = weight;
    }
    public int getWeight() {
        return this.weight;
    }
    
    @Override
    public String toString() {
        String colorName;
        if ( this.skin == Color.WHITE )
            colorName = "White";
        else if ( this.skin == Color.BLACK )
            colorName = "Black";
        else
            colorName = "Yellow";
        
        return "Skin: " + colorName + ", Growth: " + this.growth + ", Weight: " + this.weight + ".";
    }
}
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package easybudda.examples.mypropertiesdialog;
 
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
 
@SuppressWarnings("serial")
public class MyPropertiesPanel extends JPanel {
    MyProperties props;
 
    public MyPropertiesPanel(MyProperties p) {
        super(new FlowLayout());
        
        this.props = new MyProperties(p);
        
        JRadioButton skinColorWhite = new JRadioButton("White");
        JRadioButton skinColorBlack = new JRadioButton("Black");
        JRadioButton skinColorYellow = new JRadioButton("Yellow");
        
        if ( this.props.getSkin() == Color.WHITE )
            skinColorWhite.setSelected(true);
        else if ( this.props.getSkin() == Color.BLACK )
            skinColorBlack.setSelected(true);
        else
            skinColorYellow.setSelected(true);
        
        ButtonGroup skinColorGroup = new ButtonGroup();
        skinColorGroup.add(skinColorWhite);
        skinColorGroup.add(skinColorBlack);
        skinColorGroup.add(skinColorYellow);
        
        ActionListener skinColorListener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent colorEvent) {
                JRadioButton selected = (JRadioButton)colorEvent.getSource();
                switch ( selected.getText() ) {
                case "White" :
                    props.setSkin(Color.WHITE);
                    break;
                case "Black" :
                    props.setSkin(Color.BLACK);
                    break;
                case "Yellow" :
                    props.setSkin(Color.YELLOW);
                    break;
                }
            }
        };
        skinColorWhite.addActionListener(skinColorListener);
        skinColorBlack.addActionListener(skinColorListener);
        skinColorYellow.addActionListener(skinColorListener);
        
        
        String [] growthValues = new String [ 230 ];
        for ( int i = 0; i < growthValues.length; ++i )
            growthValues[i] = ( i + 1 ) + " cm";
        JComboBox<String> growthChooser = new JComboBox<>(growthValues);
        for ( int i = 0; i < growthValues.length; ++i )
            if ( ( i + 1 ) == props.getGrowth() )
                growthChooser.setSelectedIndex(i);
        growthChooser.addActionListener(new ActionListener() {
            @SuppressWarnings("unchecked")
            @Override
            public void actionPerformed(ActionEvent growthEvent) {
                JComboBox<String> chooser = (JComboBox<String>)growthEvent.getSource();
                props.setGrowth(chooser.getSelectedIndex() + 1);
            }
        });
        
        
        JSlider weightSlider = new JSlider(JSlider.HORIZONTAL, 1, 300, props.getWeight());
        weightSlider.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent weightEvent) {
                JSlider slider = (JSlider)weightEvent.getSource();
                props.setWeight(slider.getValue());
            }
        });
        
        
        this.add(new JLabel("Skin color: "));
        this.add(skinColorWhite);
        this.add(skinColorBlack);
        this.add(skinColorYellow);
        this.add(new JLabel("Growth: "));
        this.add(growthChooser);
        this.add(new JLabel("Weight: "));
        this.add(weightSlider);
    }
    
    public MyProperties getProperties() {
        return this.props;
    }
}
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
package easybudda.examples.mypropertiesdialog;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
public class MyPropertiesTester {
    private MyProperties props;
    private JLabel propsLabel;
    private JFrame mainFrame;
    
    public MyPropertiesTester() {
        props = new MyProperties(Color.WHITE, 180, 200);
        
        propsLabel = new JLabel("Current properties: " + props.toString());
        
        mainFrame = new JFrame("MyPropertiesTester");
        mainFrame.setLayout(new FlowLayout());
        mainFrame.setSize(500, 100);
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        mainFrame.add(propsLabel);
        
        JButton changePropsButton = new JButton("Change");
        changePropsButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                MyPropertiesPanel propsPanel = new MyPropertiesPanel(props);
                if ( JOptionPane.showOptionDialog(mainFrame, propsPanel, "Change Properties", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, null, null) == JOptionPane.OK_OPTION ) {
                    props = propsPanel.getProperties();
                    propsLabel.setText("Current properties: " + props.toString());
                }
            }
        });
        mainFrame.add(changePropsButton);
        
        mainFrame.setVisible(true);
    }
    
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new MyPropertiesTester();
            }
        });
    }
}
Отдельный класс для всех панелей - такое возможно?


Отдельный класс для всех панелей - такое возможно?


Отдельный класс для всех панелей - такое возможно?
0
03.09.2013, 17:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.09.2013, 17:31
Помогаю со студенческими работами здесь

Выполнить замену всех символов в строке на первый отдельный символ, а всех пробелов в строке на второй отдельный символ
Задание: 1. Ввести множество, запись или строку с помощью клавиатуры. 2. Вывести на экран...

Отдельный класс для вычислений
Привет всем! У меня есть Form1, в которую нужно вводить данные для вычисления функции. Метод,...

Разложить функцию в ряд Тейлора или Лорана во всех областях на плоскости, где такое разложение возможно
Помогите пожалуйста доделать. Заранее благодарен! z/(z^2+3z+2) ;z0=0

Отдельный класс для каждой задачи
Здравствуйте. Есть элемент управления, допустим Picturebox. На нем прорисовывает много разных...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru