Макеты. Установка высоты компонентов. Сокращение расстояний и обозначение границ - 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;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д