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

Куда поставить drawString?

21.12.2011, 23:35. Показов 1443. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сделайте так, чтобы когда Вы написали кнопку "Расставить буквы" внизу окна выводился текст "Расставить буква"!

Куда поставить g2.drawString("...") ????


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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*«Расстановка 16 букв». В квадрате размером 4 х 4 расставить 16 букв (четыре а, четыре б, четыре в, четыре с) так, чтобы в каждом горизонтальном и в каждом вертикальном ряду любая буква встречалась только один раз.*/
 
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
 
public class Main extends JFrame {
    JPanel squarePanel = new JPanel(); // Панель для квадрата
    Square square = new Square(); // Квадрат
    JPanel buttonPanel = new JPanel(); // Панель для кнопок
    JButton bArrange = new JButton("Расставить буквы");
    JButton bExit = new JButton("Выход");
    
    // Конструктор. Принимает заголовок окна
    public Main(String s) {
        super(s);
        Container c = getContentPane(); // Получаем панель содержимого окна
        c.setLayout(new BorderLayout(0, 20)); // Устанавливаем менеджер размещения BorderLayout
        squarePanel.add(square); // Добавляем квадрат на панель квадрата
        c.add(squarePanel, BorderLayout.NORTH); // Добавляем на панель содержимого панель квадрата
        bArrange.addActionListener(new ActionListener() { // Устанавливаем обработчик для кнопки bArrange
            public void actionPerformed(ActionEvent e) {
                square.arrange();
            }
        });
        buttonPanel.add(bArrange);
        bExit.addActionListener(new ActionListener() { // Устанавливаем обработчик для кнопки bExit
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        buttonPanel.add(bExit);
        c.add(buttonPanel, BorderLayout.CENTER); // Добавляем на панель содержимого панель кнопок
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(370, 190, 380, 400); // Устанавливаем границы окна
        setVisible(true);
    }
    
    public static void main(String[] args) {
        Main game = new Main("Расстановка 16 букв");
    }
}
 
// Класс для создания собственного компонента "Квадрат", расширяя класс Canvas 
class Square extends Canvas {
    private final int sum = 'а' + 'б' + 'в' + 'г';
    private final int size = 203; // Размер компонента
    private int[] x = new int[] {1, 51, 101, 151, size - 2}; // Массив координат вертикальных линий
    private int[] y = new int[] {1, 51, 101, 151, size - 2}; // Массив координат горизонтальных линий
    private char[][] m = new char[4][4]; // Матрица с буквами
    
    // Конструктор
    public Square() {
        setBackground(Color.lightGray); // Устанавливаем цвет фона компонента
        setSize(size, size); // Устанавливаем размер компонента
    }
    
    // Метод, который вызывается при перерисовке компонента
    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D)g; // Используем класс Graphics2D, чтобы рисовать толстые линии 
        g2.setStroke(new BasicStroke(3)); // Устанавливаем толщину линий равной 3
        g2.setColor(Color.blue); // Цвет линий
        g2.drawLine(x[0], y[0], x[4], y[0]); // Рисуем толстые линии
        g2.drawLine(x[0], y[1], x[4], y[1]);
        g2.drawLine(x[0], y[2], x[4], y[2]);
        g2.drawLine(x[0], y[3], x[4], y[3]);
        g2.drawLine(x[0], y[4], x[4], y[4]);
        
        g2.drawLine(x[0], y[0], x[0], y[4]);
        g2.drawLine(x[1], y[0], x[1], y[4]);
        g2.drawLine(x[2], y[0], x[2], y[4]);
        g2.drawLine(x[3], y[0], x[3], y[4]);
        g2.drawLine(x[4], y[0], x[4], y[4]);
        g2.setColor(Color.magenta); // Цвет букв
        g2.setFont(new Font("Serif", Font.BOLD, 22)); // Шрифт для букв
        if (m[0][0] != 0)
            for (int i = 0; i < 4; i++) // Рисуем все буквы в квадрате
                for (int j = 0; j < 4; j++)
                    g2.drawString("" + m[i][j], x[j] + 18, y[i] + 32);
        g2.setStroke(new BasicStroke()); // Снова устанавливаем толщину линий, которая была по умолчанию
    }
    
    // Вызывает функции расстановки букв и перерисовки компонента
    public void arrange() {
        m[0][0] = 'а'; // Заполняем первые 4 ячейки сами очевидным вариантом а, б, в, г
        m[0][1] = 'б';
        m[0][2] = 'в';
        m[0][3] = 'г';
        fill(1, 0); // Запускаем расстановку букв, начиная со второй строки
        repaint();
    }
    
    // Расставляет буквы. Рекурсивная функция. Использует поиск в глубину
    // Принимает координаты в матрице чисел, начиная с которых надо продолжить расстановку
    // Возвращает true, если в каждом горизонтальном и в каждом вертикальном ряду все буквы разные
    private boolean fill(int i, int j) {
        int iNext = i; // Определяем координаты следующей ячейки матрицы для продолжения расстановки
        int jNext = j + 1;
        if (jNext > 3) {
            jNext = 0;
            iNext++;
        }
        // Цикл по всем четырем буквам а, б, в, г. Будем ставить в ячейку каждую из них и проверять
        for (char c = 'а'; c <= 'г'; c++) {  
            m[i][j] = c;
            if (i == 3 && j == 3) { // Если заполнили последнюю ячейку матрицы, то проверяем
                if (m[0][0] != m[0][1] && m[0][0] != m[0][2] && m[0][0] != m[0][3] &&
                        m[1][0] != m[1][1] && m[1][0] != m[1][2] && m[1][0] != m[1][3] &&
                        m[2][0] != m[2][1] && m[2][0] != m[2][2] && m[2][0] != m[2][3] &&
                        m[3][0] != m[3][1] && m[3][0] != m[3][2] && m[3][0] != m[3][3] &&
                        
                        m[0][0] != m[1][0] && m[0][0] != m[2][0] && m[0][0] != m[3][0] &&
                        m[0][1] != m[1][1] && m[0][1] != m[2][1] && m[0][1] != m[3][1] &&
                        m[0][2] != m[1][2] && m[0][2] != m[2][2] && m[0][2] != m[3][2] &&
                        m[0][3] != m[1][3] && m[0][3] != m[2][3] && m[0][3] != m[3][3] &&
                        
                        m[0][0] + m[0][1] + m[0][2] + m[0][3] == sum && 
                        m[1][0] + m[1][1] + m[1][2] + m[1][3] == sum &&
                        m[2][0] + m[2][1] + m[2][2] + m[2][3] == sum &&
                        m[3][0] + m[3][1] + m[3][2] + m[3][3] == sum &&
                        
                        m[0][0] + m[1][0] + m[2][0] + m[3][0] == sum &&
                        m[0][1] + m[1][1] + m[2][1] + m[3][1] == sum &&
                        m[0][2] + m[1][2] + m[2][2] + m[3][2] == sum &&
                        m[0][3] + m[1][3] + m[2][3] + m[3][3] == sum)
                    return true;
            }
            else if (fill(iNext, jNext)) // Вызываем рекурсивно эту же функцию для следующей ячейки
                return true;
        }
        return false;
    }
}
[/QUOTE]
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.12.2011, 23:35
Ответы с готовыми решениями:

Надо Поставить формулу. Но не могу понять, куда поставить
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #include &lt;math.h&gt; #include...

Подстройка размера картинки под разрешение экрана (как поставить картинку по середине, чтобы была, я не знаю уже((( подскажите пож куда что поставить
HTML-код: &lt;table id=&quot;headerTb&quot; width=&quot;100%&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tr&gt; &lt;td class=&quot;hdImg&quot;&gt;&lt;img class=&quot;topImg&quot;...

Куда поставить ; ?
Не знаю как исправить ошибка error C2143: синтаксическая ошибка: отсутствие &quot;;&quot; перед &quot;int&quot; #include &lt;iostream&gt; ...

1
614 / 488 / 175
Регистрация: 02.03.2010
Сообщений: 1,238
22.12.2011, 07:52
Судя по всему, либо в методе
Java
1
2
3
public void actionPerformed(ActionEvent e) {
   square.arrange();
}
либо в arrange()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.12.2011, 07:52
Помогаю со студенческими работами здесь

Куда поставить условие?
Реализовать замыкание следующим образом: необходимо, чтобы квадрат числа (которое при замыкании увеличивается на 0,01) стал приблизительно...

Куда поставить кулер?
Система: Блок питания Cooler Master 520W Thunder M Видеокарта 2Gb GIGABYTE GV-N66TWF2-2GD с CUDA Жесткий диск 1Tb Western...

Куда поставить проверку Get-ом?
Ребят, помогите пожалуйста, есть два файла html, которые обращаются вот к этому php файлу- проблема в том что я не знаю куда поставить...

Куда поставить счетчик
uses crt; function nod( a, b: integer): integer; begin while (a &lt;&gt; 0) and (b &lt;&gt; 0) do if (a &gt;= b) and (i=1) then ...

Куда поставить код с редиректом
Добрый день. У меня проблема при обновлении формы, заполнил данные, нажал кнопку отправить и все отправилось, а нажимая обновить страницу...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
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