Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java: GUI, Графика
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
babaevkamil
5 / 5 / 3
Регистрация: 17.10.2012
Сообщений: 116
Завершенные тесты: 1
1

Макеты. Установка высоты компонентов. Сокращение расстояний и обозначение границ

09.12.2015, 21:04. Просмотров 594. Ответов 9

ВОПРОСЫ ПО ИНТЕРФЕЙСУ! НЕ АЛГОРИТМУ!
А то, наверное, всех уже осточертели вопросы про решение СЛАУ

Пишу программу для решения СЛАУ с произвольным количеством уравнений/переменных.
Разделил фрейм на 3 панели. Как обозначить границы между панелями? Что-то вроде того, что на 3м скрине.
Ещё хотел спросить, как сократить дистанцию между компонентами, а то расстояния огромные. И все TextField должны быть в одну строку, а крайний правый - квадрат, да и кнопка огромная.

Макеты:
Фрейм - BorderLayout
Первая (верхняя) панель [NORTH] - FlowLayout
Вторая (левая) панель [CENTER] - GridBagLayout
Третья (правая) панель [EAST] - BoxLayout

Весь код в одном файле.
Есть консольная версия программы, но нужен интерфейс (требовал преподаватель).
Вопросов по алгоритму нет. Только с интерфейсом.
С Java знаком пару недель. Ибо я не планировал пока учить этот язык (пока еще C# не закончил), а универ это отдельная история. Но вот задачку задали.
Main.java

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
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class Main extends JFrame{
    public static void main(String[] args){
        JFrame frame = new JFrame();
        frame.setSize(1000, 500);
        frame.setLocation(100, 100);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
 
        JPanel CountPanel = new JPanel();
        JPanel EquationPanel = new JPanel();
        JPanel SubmitPanel = new JPanel();
 
        BorderLayout frameLayout = new BorderLayout();
        frame.setLayout(frameLayout);
        frame.add(CountPanel, BorderLayout.NORTH);
        frame.add(EquationPanel, BorderLayout.CENTER);
        frame.add(SubmitPanel, BorderLayout.EAST);
 
        CountPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
        Label countXLabel = new Label("Введите кол-во переменных:");
        Label countEqLabel = new Label("Введите кол-во уравнений");
        TextField countXTField = new TextField();    // x[n]    | n столбцов
        TextField countEqTField = new TextField();   // a[m][n] | m строк
        Button countOkButton = new Button("ОК");
        CountPanel.add(countXLabel, LEFT_ALIGNMENT);
        CountPanel.add(countXTField, LEFT_ALIGNMENT);
        CountPanel.add(countEqLabel, LEFT_ALIGNMENT);
        CountPanel.add(countEqTField, LEFT_ALIGNMENT);
        CountPanel.add(countOkButton, LEFT_ALIGNMENT);
        CountPanel.revalidate();
 
        //EquationPanel.setLayout(new GridLayout(m, 2*n+1));
        GridBagLayout eqLayout = new GridBagLayout();
        GridBagConstraints eqLayoutParam = new GridBagConstraints();
        EquationPanel.setLayout(eqLayout);
 
        eqLayoutParam.gridwidth = 1; eqLayoutParam.gridheight = 1;
        eqLayoutParam.fill = GridBagConstraints.NONE;
        eqLayoutParam.anchor = GridBagConstraints.WEST;
        eqLayoutParam.weightx = 0.01; eqLayoutParam.weighty = 0.01;
 
        countOkButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                int m = Integer.parseInt(countEqTField.getText());
                int n = Integer.parseInt(countXTField.getText());
 
                TextField[][] coefTFields = new TextField[m][n+1];
                Label[][] variableLabels = new Label[m][n];
                EquationPanel.removeAll();
                for(int i = 0; i < m; i++){
                    for(int j = 0, k = 0; j < n; j++, k += 2){
                        char sign = '+';
                        if (j == n-1){sign = '=';}
 
                        coefTFields[i][j] = new TextField();
                        variableLabels[i][j] = new Label("X[" + (j+1) + "]" + sign);
 
                        eqLayoutParam.gridx = k; eqLayoutParam.gridy = i;
                        eqLayout.setConstraints(coefTFields[i][j], eqLayoutParam);
 
                        eqLayoutParam.gridx = k+1; eqLayoutParam.gridy = i;
                        eqLayout.setConstraints(variableLabels[i][j], eqLayoutParam);
 
                        EquationPanel.add(coefTFields[i][j]);
                        EquationPanel.add(variableLabels[i][j]);
                    }
                    coefTFields[i][n] = new TextField();
                    eqLayoutParam.gridx = 2*n; eqLayoutParam.gridy = i;
                    eqLayout.setConstraints(coefTFields[i][n], eqLayoutParam);
                    EquationPanel.add(coefTFields[i][n]);
                }
                EquationPanel.revalidate();
            }
        });
 
        SubmitPanel.setLayout(new BoxLayout(SubmitPanel, BoxLayout.Y_AXIS));
        Label customSolLabel = new Label("Введдите частное решение:"); customSolLabel.setSize(20, 100);
        TextField customSolTField = new TextField();
        Button submitButton = new Button("Решить!");
 
        SubmitPanel.add(customSolLabel);
        SubmitPanel.add(customSolTField);
        SubmitPanel.add(submitButton);
    }
}
0
Миниатюры
Макеты. Установка высоты компонентов. Сокращение расстояний и обозначение границ   Макеты. Установка высоты компонентов. Сокращение расстояний и обозначение границ   Макеты. Установка высоты компонентов. Сокращение расстояний и обозначение границ  

QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2015, 21:04
Ответы с готовыми решениями:

Обозначение границ диапазона/ таблицы
Ребят...у меня таблица. Как обозначить границы таблицы...чтобы при удалении строки, удаление было...

Изменение цвета границ компонентов
Можно ли менять цвет границ компонента Edit, LabeledEdit, ComboBox и т.д. Как только отключаю...

Установка камер видеонаблюдений на расстояний
Здравствуйте Форумчане! Проект - установка видеонаблюдений для рыбного хозяйства. Я пока сам не...

Установка границ документа
Установите границы документа: верхнее и нижнее поле – 65 пикселей, левое поле – 30 пикселей....

Хитрая установка высоты дива ?
Есть два дива шириной 100%, один под другим. Высота верхнего меняется от контекста и изначально...

9
babaevkamil
5 / 5 / 3
Регистрация: 17.10.2012
Сообщений: 116
Завершенные тесты: 1
10.12.2015, 10:49  [ТС] 2
Неужто никто не знает? Или я вопрос не правильно задаю? Ну не гуглиться у меня это Т_Т
Читать от и до все про интерфейсы сейчас времени нет, срок сдачи больно малый.
0
Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,436
10.12.2015, 11:49 3
Юзайте JSplitPane
https://docs.oracle.com/javase/tutor...splitpane.html
0
babaevkamil
5 / 5 / 3
Регистрация: 17.10.2012
Сообщений: 116
Завершенные тесты: 1
10.12.2015, 15:55  [ТС] 4
Цитата Сообщение от Doctor_ Посмотреть сообщение
Он представляет собой панель, разделенную на две области, границу между которыми пользователь может перемещать.
Я не совсем понял, мне на фрейм целиком надеть эту панель, а потом на нее мои три панели?
0
10.12.2015, 15:55
Wado-Ru
236 / 235 / 72
Регистрация: 02.07.2013
Сообщений: 881
11.12.2015, 07:23 5
Цитата Сообщение от babaevkamil Посмотреть сообщение
да и кнопка огромная.
так размер не ставиться что-ли?
Java
1
butt.setPreferredSize(new Dimension(50,30));
Цитата Сообщение от babaevkamil Посмотреть сообщение
Как обозначить границы между панелями?
бордюров много, можно так например
Java
1
panel.setBorder(BorderFactory.createTitledBorder("Панель"));
Добавлено через 1 минуту
Цитата Сообщение от babaevkamil Посмотреть сообщение
Ещё хотел спросить, как сократить дистанцию между компонентами,
это на каком лейауте нужно сделать?
1
babaevkamil
5 / 5 / 3
Регистрация: 17.10.2012
Сообщений: 116
Завершенные тесты: 1
11.12.2015, 09:22  [ТС] 6
это на каком лейауте нужно сделать?
GridBagLayout (панель), который внутри BorderLayout (фрейм).

Добавлено через 39 минут
Это та часть, где x1 x2 и т.д.
Чем меньше компонентов на панели, тем больше расстояние между ними.. Компоненты равномерно располагаются по всей площади панели, как я понял, но мне нужно, чтобы они плотно друг к другу прилегали и выравнивались к лево-верх..

За setPreferrenseSize спасибо. Помогло на кнопке. Но в левое панели с иксами не работает оно.
0
Wado-Ru
236 / 235 / 72
Регистрация: 02.07.2013
Сообщений: 881
11.12.2015, 09:39 7
это весь код?
0
babaevkamil
5 / 5 / 3
Регистрация: 17.10.2012
Сообщений: 116
Завершенные тесты: 1
11.12.2015, 12:34  [ТС] 8
Цитата Сообщение от Wado-Ru Посмотреть сообщение
это весь код?
Если вы про то, что в спойлере "Main.java", то да. Когда закончу с интерфейсом, сюда же добавлю вычисление СЛАУ.
Это Лабораторная в универе, так что разделять на несколько файлов нет смысла
0
Wado-Ru
236 / 235 / 72
Регистрация: 02.07.2013
Сообщений: 881
11.12.2015, 13:33 9
Цитата Сообщение от babaevkamil Посмотреть сообщение
GridBagLayout (панель), который внутри BorderLayout (фрейм).
видимо тут и проблема

зачем вам вообще BorderLayout, если уж вы с GridBagLayout разобрались
0
babaevkamil
5 / 5 / 3
Регистрация: 17.10.2012
Сообщений: 116
Завершенные тесты: 1
11.12.2015, 14:57  [ТС] 10
Цитата Сообщение от Wado-Ru Посмотреть сообщение
зачем вам вообще BorderLayout, если уж вы с GridBagLayout разобрались
потому что лейблы и текстфилды в панели генерируются динамически, в зависимости от заданных количеств уравнений и переменных. у меня три блока интерфейса (ввод размеров, непосредственно коэфиценты СЛАУ и блок частного решения/вывода ответа), поэтому логично было разелить. так было проще работать....
Java
1
2
//Без этой строчки всё компактно, но центрирование по центру панели. Видимо, придется так и оставить =(
eqLayoutParam.weightx = 0.01; eqLayoutParam.weighty = 0.01;
0
Миниатюры
Макеты. Установка высоты компонентов. Сокращение расстояний и обозначение границ  
11.12.2015, 14:57
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2015, 14:57

Найти сумму расстояний от начала координат до точек параболы и среднее арифметическое этих расстояний
Найти сумму расстояний от начала координат до точек параболы Y=AX^2+B, имеющих абсциссы...

Динамическая установка высоты блочного элемента
Имеется ли какой-либо надёжный способ установки высоты абсолютно позиционированного контейнера div...

SDL: OpenGL: установка границ объема отсечения glOrtho(.);
Открыл окно SDL, создал контекст OpenGL. Соответственно, что бы что-либо рисовать, нужно...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.