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

Узнай цену своей работы

Формулировка задачи:

ВОПРОСЫ ПО ИНТЕРФЕЙСУ! НЕ АЛГОРИТМУ! А то, наверное, всех уже осточертели вопросы про решение СЛАУ Пишу программу для решения СЛАУ с произвольным количеством уравнений/переменных. Разделил фрейм на 3 панели. Как обозначить границы между панелями? Что-то вроде того, что на 3м скрине. Ещё хотел спросить, как сократить дистанцию между компонентами, а то расстояния огромные. И все TextField должны быть в одну строку, а крайний правый - квадрат, да и кнопка огромная. Макеты: Фрейм - BorderLayout Первая (верхняя) панель [NORTH] - FlowLayout Вторая (левая) панель [CENTER] - GridBagLayout Третья (правая) панель [EAST] - BoxLayout Весь код в одном файле. Есть консольная версия программы, но нужен интерфейс (требовал преподаватель). Вопросов по алгоритму нет. Только с интерфейсом. С Java знаком пару недель. Ибо я не планировал пока учить этот язык (пока еще C# не закончил), а универ это отдельная история. Но вот задачку задали.
Листинг программы
  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. public class Main extends JFrame{
  6. public static void main(String[] args){
  7. JFrame frame = new JFrame();
  8. frame.setSize(1000, 500);
  9. frame.setLocation(100, 100);
  10. frame.setVisible(true);
  11. frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  12. JPanel CountPanel = new JPanel();
  13. JPanel EquationPanel = new JPanel();
  14. JPanel SubmitPanel = new JPanel();
  15. BorderLayout frameLayout = new BorderLayout();
  16. frame.setLayout(frameLayout);
  17. frame.add(CountPanel, BorderLayout.NORTH);
  18. frame.add(EquationPanel, BorderLayout.CENTER);
  19. frame.add(SubmitPanel, BorderLayout.EAST);
  20. CountPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
  21. Label countXLabel = new Label("Введите кол-во переменных:");
  22. Label countEqLabel = new Label("Введите кол-во уравнений");
  23. TextField countXTField = new TextField(); // x[n] | n столбцов
  24. TextField countEqTField = new TextField(); // a[m][n] | m строк
  25. Button countOkButton = new Button("ОК");
  26. CountPanel.add(countXLabel, LEFT_ALIGNMENT);
  27. CountPanel.add(countXTField, LEFT_ALIGNMENT);
  28. CountPanel.add(countEqLabel, LEFT_ALIGNMENT);
  29. CountPanel.add(countEqTField, LEFT_ALIGNMENT);
  30. CountPanel.add(countOkButton, LEFT_ALIGNMENT);
  31. CountPanel.revalidate();
  32. //EquationPanel.setLayout(new GridLayout(m, 2*n+1));
  33. GridBagLayout eqLayout = new GridBagLayout();
  34. GridBagConstraints eqLayoutParam = new GridBagConstraints();
  35. EquationPanel.setLayout(eqLayout);
  36. eqLayoutParam.gridwidth = 1; eqLayoutParam.gridheight = 1;
  37. eqLayoutParam.fill = GridBagConstraints.NONE;
  38. eqLayoutParam.anchor = GridBagConstraints.WEST;
  39. eqLayoutParam.weightx = 0.01; eqLayoutParam.weighty = 0.01;
  40. countOkButton.addActionListener(new ActionListener() {
  41. @Override
  42. public void actionPerformed(ActionEvent actionEvent) {
  43. int m = Integer.parseInt(countEqTField.getText());
  44. int n = Integer.parseInt(countXTField.getText());
  45. TextField[][] coefTFields = new TextField[m][n+1];
  46. Label[][] variableLabels = new Label[m][n];
  47. EquationPanel.removeAll();
  48. for(int i = 0; i < m; i++){
  49. for(int j = 0, k = 0; j < n; j++, k += 2){
  50. char sign = '+';
  51. if (j == n-1){sign = '=';}
  52. coefTFields[i][j] = new TextField();
  53. variableLabels[i][j] = new Label("X[" + (j+1) + "]" + sign);
  54. eqLayoutParam.gridx = k; eqLayoutParam.gridy = i;
  55. eqLayout.setConstraints(coefTFields[i][j], eqLayoutParam);
  56. eqLayoutParam.gridx = k+1; eqLayoutParam.gridy = i;
  57. eqLayout.setConstraints(variableLabels[i][j], eqLayoutParam);
  58. EquationPanel.add(coefTFields[i][j]);
  59. EquationPanel.add(variableLabels[i][j]);
  60. }
  61. coefTFields[i][n] = new TextField();
  62. eqLayoutParam.gridx = 2*n; eqLayoutParam.gridy = i;
  63. eqLayout.setConstraints(coefTFields[i][n], eqLayoutParam);
  64. EquationPanel.add(coefTFields[i][n]);
  65. }
  66. EquationPanel.revalidate();
  67. }
  68. });
  69. SubmitPanel.setLayout(new BoxLayout(SubmitPanel, BoxLayout.Y_AXIS));
  70. Label customSolLabel = new Label("Введдите частное решение:"); customSolLabel.setSize(20, 100);
  71. TextField customSolTField = new TextField();
  72. Button submitButton = new Button("Решить!");
  73. SubmitPanel.add(customSolLabel);
  74. SubmitPanel.add(customSolTField);
  75. SubmitPanel.add(submitButton);
  76. }
  77. }

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

textual
Листинг программы
  1. //Без этой строчки всё компактно, но центрирование по центру панели. Видимо, придется так и оставить =(
  2. eqLayoutParam.weightx = 0.01; eqLayoutParam.weighty = 0.01;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.929 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы