Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java GUI
Войти
Регистрация
Восстановить пароль
 
Shock9777
5 / 0 / 0
Регистрация: 11.03.2015
Сообщений: 36
1

Нужно заменить GroupLayout на две панели

22.11.2015, 10:54. Просмотров 201. Ответов 0
Метки нет (Все метки)

Здравствуйте. Я в JAVA новичок и не очень понимаю как это всё делается.
Одну панель (West) я создала, но возникла проблема со слушателями:
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.Border;
 
public class FORM1 extends JFrame {
    
    public static void createGUI() {
        JFrame frame = new JFrame("Рассчёт интеграла и рисование графика"); // создание окна и его заголовка
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        JPanel Panel1 = new JPanel(); //панель для установки положения других
       Panel1.setLayout(new BorderLayout());
         
        JPanel panel12 = new JPanel(); //первая панель
        
        panel12.add(createEmptyLabel());
        
       panel12.setBorder(BorderFactory.createTitledBorder("Произведение рассчётов"));
        
        Label lab1 = new Label("Количество разбиений:");
        lab1.setBounds(5, 5, 60, 30);
        panel12.add(lab1);
        
        JTextField tf1=new JTextField(10);
        tf1.setBounds(40, 5, 60, 30);
        panel12.add(tf1);
        
        Label lab2 = new Label("oт a:");
        lab2.setBounds(75, 5, 85, 30);
        panel12.add(lab2);
        
        JTextField tf2=new JTextField("0");
        tf2.setBounds(110, 5, 85, 30);
        panel12.add(tf2);
        
        Label lab3 = new Label("до b:");
        lab3.setBounds(145, 5, 85, 30);
        panel12.add(lab3);
        
        JTextField tf3=new JTextField("25");
        tf3.setBounds(180, 5, 85, 30);
        panel12.add(tf3);
        
        JButton but1 = new JButton("Bычислить");
        but1.setBounds(215, 5, 85, 30);
        panel12.add(but1);
        but1.addActionListener(listener1); //Обработчик для кнопки 1
        
        JButton but2 = new JButton("График");
        but2.setBounds(250, 5, 85, 30);
        panel12.add(but2);
        
        JButton but3 = new JButton("Очистить");
        but3.setBounds(285, 5, 85, 30);
        panel12.add(but3);
        
        Label lab4 = new Label("Oтвет:");
        lab4.setBounds(320, 5, 85, 30);
        panel12.add(lab4);
        
        Label lab5 = new Label("Нет данных.");
        lab5.setBounds(355, 5, 85, 30);
        panel12.add(lab5);
        
        Panel1.add(panel12, BorderLayout.WEST);
        
        frame.getContentPane().add(panel12);
        frame.setPreferredSize(new Dimension(450, 485));
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    
    double x0 = 0, x1 = 25, a, b; int n;
    
    ActionListener listener1=new ActionListener(){ //Создание первого слушателя событий
         public void actionPerformed(ActionEvent event){                                        
        try { // Пробуем считать данные с поля
            n = Integer.valueOf(tf1.getText());
        } catch (NumberFormatException e) { // Ошибка при считывании
            n = 0;
        }
        if (n <= 0 || n >= 10001) {
            tf1.setText("Ошибка при вводе.");
            n = 0;
            JOptionPane.showMessageDialog(null, "Неверное число разбиений (от 1 до 10000)!", "Ошибка при вводе", JOptionPane.WARNING_MESSAGE);
            return;
        }
        try { // Попытка считать с полей диапазон
            a = Double.valueOf(tf2.getText());
            b = Double.valueOf(tf3.getText());
        } catch (NumberFormatException e) { // Ошибка при считывании
            tf1.setText("Ошибка при вводе.");
            n = 0;
            JOptionPane.showMessageDialog(null, "Неверный диапазон (от " + x0 + " до " + x1 + ")", "Ошибка при вводе", JOptionPane.WARNING_MESSAGE);
            return;
        }
        if (a < x0 || a > x1 || b < x0 || b > x1) {
            tf1.setText("Ошибка при вводе.");
            n = 0;
            JOptionPane.showMessageDialog(null, "Неверный диапазон (от " + x0 + " до " + x1 + ")!", "Ошибка при вводе", JOptionPane.WARNING_MESSAGE);
            return;
        }
        if (a >= b) {
            tf1.setText("Ошибка при вводе.");
            n = 0;
            JOptionPane.showMessageDialog(null, "Неверный диапазон, x0 должен быть меньше x1!", "Ошибка при вводе", JOptionPane.WARNING_MESSAGE);
            return;
        }
       // tf4.setText("S = " + gauss(n, a, b));
        
    }};  }                                  
    
    public static JLabel createEmptyLabel() {
        JLabel label = new JLabel();
        label.setPreferredSize(new Dimension(100, 20));
        return label;
   }
 
   public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
             public void run() {
                  JFrame.setDefaultLookAndFeelDecorated(true);
                  createGUI();
             }
        });
   }
        
}
Ещё нужно создать рядом вторую панель, которая выводила бы график:
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
 private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        jButton1ActionPerformed(null);
        int zoom = jPanel1.getWidth() / (int) (b - a + 2);
        jScrollBar1.setValue((int) (a - 1) * zoom);
        paint(null);
    }                                        
 
    public void paint(java.awt.Graphics g) {
       
        // Определяем область графика:
        java.awt.Graphics gr = jPanel1.getGraphics();
        gr.clearRect(0, 0, jPanel1.getWidth(), jPanel1.getHeight());
        
        // Определяем масштаб графика
        //int zoom = jSlider1.getValue();
        //jScrollBar1.setMaximum((int) x1 * zoom);
        int zoom = jPanel1.getWidth() / (int) (b - a + 2);
        jScrollBar1.setMaximum((int) b * zoom);
        
        // Определяем нули осей:
        int xZero = -jScrollBar1.getValue();
        //int xZero = 10 -(int) a * zoom;
        int yZero = jPanel1.getHeight() / 2;
        
        // X:
        gr.drawLine(0, yZero, jPanel1.getWidth(), yZero);
        gr.drawString("X", jPanel1.getWidth()-10, yZero+20);
        gr.drawLine(jPanel1.getWidth()-10, yZero-3, jPanel1.getWidth(), yZero);
        gr.drawLine(jPanel1.getWidth()-10, yZero+3, jPanel1.getWidth(), yZero);
        for (int i=0; i <= (int) x1; i+=2) {
            gr.drawLine(xZero+i*zoom, yZero-2, xZero+i*zoom, yZero+2);
            gr.drawString(""+i, xZero+i*zoom+2, yZero+15);
        }
        
        // Y:
        gr.drawLine(xZero, 0, xZero, jPanel1.getHeight());
        gr.drawString("Y", xZero+10, 10);
        gr.drawLine(xZero, 0, xZero-5, 10);
        gr.drawLine(xZero, 0, xZero+5, 10);
        for (int i=-3; i <= 3; i+=2) {
            gr.drawLine(xZero-2, yZero-i*zoom, xZero+2, yZero-i*zoom);
            gr.drawString(""+i, xZero+5, yZero-i*zoom);
        }
        
        // Проверям, нужно ли рисовать графики:
        if (n == 0) return;
        
        // Сам график рисуется последним, так как отрисовка ведётся послойно,
        // то есть накладыванием.
        
        // Закрашивание области (серым):
        gr.setColor(Color.ORANGE);
        for (double x = a; x <= b; x+=0.001) {
            gr.drawLine(xZero + (int) (x*zoom), yZero,
                        xZero + (int) (x*zoom), yZero - (int) (f(x)*zoom));
        }
        
        // Разбиения графика (тёмно-серым):
        gr.setColor(Color.darkGray);
        double h = ((b-a) / n);
        for (double x = a; x <= b; x+=h) {
            gr.drawLine(xZero + (int) (x*zoom), yZero,
                        xZero + (int) (x*zoom), yZero - (int) (f(x)*zoom));
        }
        
        // X:
        gr.drawLine(0, yZero, jPanel1.getWidth(), yZero);
        gr.drawString("X", jPanel1.getWidth()-10, yZero+20);
        gr.drawLine(jPanel1.getWidth()-10, yZero-3, jPanel1.getWidth(), yZero);
        gr.drawLine(jPanel1.getWidth()-10, yZero+3, jPanel1.getWidth(), yZero);
        for (int i=0; i <= (int) x1; i+=2) {
            gr.drawLine(xZero+i*zoom, yZero-2, xZero+i*zoom, yZero+2);
            gr.drawString(""+i, xZero+i*zoom+2, yZero+15);
        }
        
        // График (красным):
        gr.setColor(Color.red);
        for (double x = x0, xold = x0; x <= x1; x+=0.001) {
            gr.drawLine(xZero + (int) (xold*zoom), yZero - (int) (f(xold)*zoom),
                        xZero + (int) (x*zoom), yZero - (int) (f(x)*zoom));
            xold = x;
            
              }
        }
Буду очень благодарна любым подсказкам!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2015, 10:54
Ответы с готовыми решениями:

Как сериализовать GroupLayout serializable
Ребята вопрос на миллион как можно сериализовать GroupLayout

Две панели на одном фрейме
Руский плох, если чо извените:) Вопрос в следующим, имею фрейм, можно ли...

Две верхние панели в одну строчку
Подскажите пожалуйста как можно поставить две разные верхние панели в один...

Две панели изменяют нарисованное
Приветствую, сделал панель на которой написал числа, поверх сделал 2 панель, на...

Две кнопки разместить в правом углы панели
В конструкторе формы пытаюсь сделать следующее: FlowLayoutPanel...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2015, 10:54

Заменить имя программы в панели Установка программ
Проблемма такая - есть программа с названием Name1 - нужно чтобы в списке...

Нужно, чтобы окно на панели задач не выводилось
Когда книга открылась, на панели задач появляется этакое окошечко. а можно...

Нужно в конце процесса выбросить из панели задач Задачу EXCEL
Приветствую всех! Я работаю с EXCEL через VB и мне никак не удается в конце...


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

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

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