1 / 1 / 0
Регистрация: 13.06.2013
Сообщений: 49
1

Собственная компонента Swing

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

Author24 — интернет-сервис помощи студентам
Столкнулся с проблемой в создании компоненты. Использовал статью Skipy().
Фрейм:
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
package ru.krest;
 
import java.awt.*;
import javax.swing.JButton;
import javax.swing.JFrame;
 
public class Krest {
    static JButton newgame;
    static JButton hint;
    static Tic tic;
    final static boolean shouldFill = true;
    final static boolean shouldWeightX = true;
    final static boolean RIGHT_TO_LEFT = false;
 
    public static void addComponentsToPane(Container pane) {
        if (RIGHT_TO_LEFT) {
            pane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        }
 
        pane.setLayout(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();
        if (shouldFill) {
        c.fill = GridBagConstraints.HORIZONTAL;
        }
 
        newgame = new JButton("Новая игра");
        if (shouldWeightX) {
        c.weightx = 0.5;
        }
        c.fill = GridBagConstraints.HORIZONTAL;
        c.gridx = 0;
        c.gridy = 0;
        pane.add(newgame, c);
 
        hint = new JButton("Подсказка");
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.gridx = 1;
        c.gridy = 0;
        pane.add(hint, c);
        
    }
 
    private static void createAndShowGUI() {
        JFrame frame = new JFrame("Крестики-Нолики");
        frame.add(new Tic(), BorderLayout.CENTER);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        addComponentsToPane(frame.getContentPane());
        frame.setLocationRelativeTo(null);
        frame.pack();
        frame.setVisible(true);
    }
 
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                createAndShowGUI();
            }
        });
    }
}
И компонента:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package ru.krest;
 
import java.awt.*;
import javax.swing.*;
 
public class Tic extends JPanel{
    
    public Tic () {
        setOpaque(true);
    }
    
    @Override
    protected void paintComponent (Graphics g){
        Graphics2D g2 = (Graphics2D)g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setColor (Color.red);
        g2.drawLine(10, 10, 10, 10);
    }
}
Пробывал засунуть и в панель и в фрейм не хочет...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.08.2013, 10:19
Ответы с готовыми решениями:

Собственная консоль через Swing
Всем доброго времени суток! Встала задача создать собственную консоль на подобие cmd или...

Swing-компонента для установки времени (как в Windows)
Всем привет! Нужна Swing-компонента для установки времени (как в Windows). Помогите!!! Заранее...

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

С помощью компонента SpinEdit организуйте управление количеством строк компонента Stringgrid
помогите решить) Поместите на форму компоненты Stringgrid и SpinEdit. С помощью компонента...

10
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
28.08.2013, 11:14 2
А что значит "не хочет"? Вы с какими предпочтительными размерами ее вставляете? По умолчанию у панели 0х0, реализуйте метод getPreferredSize с размерами, отличными от нуля. И закрасьте весь фон каким-нибудь ярким цветом, чтобы, понять, что панель вставилась.

Ну и gridwidth/gridheight неплохо было бы устанавливать у GBC.
0
1 / 1 / 0
Регистрация: 13.06.2013
Сообщений: 49
28.08.2013, 11:41  [ТС] 3
Так, сейчас посмотрю.

Добавлено через 4 минуты
Java
1
pane.setBackground(Color.red);
Панель закраснела, значит установилась.
Цитата Сообщение от Skipy Посмотреть сообщение
По умолчанию у панели 0х0, реализуйте метод getPreferredSize
Установил, заработало, спасибо.
0
1 / 1 / 0
Регистрация: 13.06.2013
Сообщений: 49
29.08.2013, 22:52  [ТС] 4
А как добавить к компоненте событие?

Добавлено через 2 минуты
Мучаюсь с processMouseEvent, но не получается.
0
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
30.08.2013, 10:06 5
Цитата Сообщение от GefoS Посмотреть сообщение
А как добавить к компоненте событие?

Добавлено через 2 минуты
Мучаюсь с processMouseEvent, но не получается.
Про эти методы забудьте. Какое событие хотите ловить?
0
1 / 1 / 0
Регистрация: 13.06.2013
Сообщений: 49
30.08.2013, 10:46  [ТС] 6
Событие нажатия мыши на компонент, что-то типо кнопки.
0
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
30.08.2013, 10:50 7
Цитата Сообщение от GefoS Посмотреть сообщение
Событие нажатия мыши на компонент, что-то типо кнопки.
Вам нужен MouseListener, добавленный компоненте. Там есть события mouseEntered, mouseExited, mousePressed, mouseReleased, mouseClicked. Если все методы не нужны - наследуетесь от MouseAdapter.
0
1 / 1 / 0
Регистрация: 13.06.2013
Сообщений: 49
30.08.2013, 12:36  [ТС] 8
Цитата Сообщение от Skipy Посмотреть сообщение
Если все методы не нужны - наследуетесь от MouseAdapter.
Собственно все методы и не нужны, только нажал и опустил. Но собственно вот:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package ru.krest;
 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
public class Net extends JComponent{
    public Net () {
        setOpaque(true);
    }
    
    @Override
    protected void paintComponent (Graphics g){
        Graphics2D g2 = (Graphics2D)g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//        g2.drawLine (50, 0, 50, 150);
//        g2.drawLine (100, 0, 100, 150);
//        g2.drawLine (0, 50, 150, 50);
//        g2.drawLine (0, 100, 150, 100);
          g2.drawRect(0, 0, 50, 50);
    }
}
Но если не унаследоваться от JComponent, оно не будет компонентой. ?
0
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
30.08.2013, 12:51 9
А где тут обработка нажатий мыши?
0
1 / 1 / 0
Регистрация: 13.06.2013
Сообщений: 49
30.08.2013, 12:56  [ТС] 10
Пока нету, не удаётся реализовывать.
0
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
30.08.2013, 13:20 11
http://docs.oracle.com/javase/... index.html
http://docs.oracle.com/javase/... tener.html
0
30.08.2013, 13:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.08.2013, 13:20
Помогаю со студенческими работами здесь

Использование компонента TreeView как переключатель вкладок компонента TabControl
И так, есть форма на которой расположились компоненты TabControl и TreeView. Вопрос, можно ли...

Как с одной строки компонента, сохранить информацию в другую строку другого компонента?
Здравствуйте, у меня возник вопрос, когда выделяешь строку в TreeView1, тот файл который...

Создание визуального компонента наследника базового компонента
Добрый день! В VS 2005 было возможно создать элемент Windows Forms control library на базе...

Создание своего компонента на основе компонента Timer
нужно создать свой компонент какбы который наследует компонент Таймер нужно хотя бы добавить...

Собственная кнопка
Здравствуйте! Подскажите пожалуйста как без WPF создать кнопку со своим дизайном. У меня есть...

Собственная строка
Написал простенький класс реализующий часть возможностей string // //GetLength() // int...


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

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

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