Макеты. Установка высоты компонентов. Сокращение расстояний и обозначение границ - 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;