Макеты. Установка высоты компонентов. Сокращение расстояний и обозначение границ - Java
Формулировка задачи:
ВОПРОСЫ ПО ИНТЕРФЕЙСУ! НЕ АЛГОРИТМУ!
А то, наверное, всех уже осточертели вопросы про решение СЛАУ
Пишу программу для решения СЛАУ с произвольным количеством уравнений/переменных.
Разделил фрейм на 3 панели. Как обозначить границы между панелями? Что-то вроде того, что на 3м скрине.
Ещё хотел спросить, как сократить дистанцию между компонентами, а то расстояния огромные. И все TextField должны быть в одну строку, а крайний правый - квадрат, да и кнопка огромная.
Макеты:
Фрейм - BorderLayout
Первая (верхняя) панель [NORTH] - FlowLayout
Вторая (левая) панель [CENTER] - GridBagLayout
Третья (правая) панель [EAST] - BoxLayout
Весь код в одном файле.
Есть консольная версия программы, но нужен интерфейс (требовал преподаватель).
Вопросов по алгоритму нет. Только с интерфейсом.
С Java знаком пару недель. Ибо я не планировал пока учить этот язык (пока еще C# не закончил), а универ это отдельная история. Но вот задачку задали.
Листинг программы
- 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);
- }
- }
Решение задачи: «Макеты. Установка высоты компонентов. Сокращение расстояний и обозначение границ»
textual
Листинг программы
- //Без этой строчки всё компактно, но центрирование по центру панели. Видимо, придется так и оставить =(
- eqLayoutParam.weightx = 0.01; eqLayoutParam.weighty = 0.01;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д