Как можно вывести в jJLable текст
Как вывести i на выходе цикла в vvivod, желательно столбиком, знаю то что отступ в JLable выполняется через
.
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
import javax.swing.text.PlainDocument;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class Main extends JFrame {
JPanel panel;
JButton butoon;
static JTextField textArea;
static JLabel vvivod;
static String How;
public static void main(String[] args) {
Main mainWindow = new Main();
mainWindow.setSize(500, 1000);
mainWindow.setResizable(false);
mainWindow.setTitle("Простые числа");
JButton button = new JButton();
button.setActionCommand("Go");
button.setText("Посчитать");
button.addActionListener(new ListenerAction());
textArea = new JTextField(10);
textArea.setBounds(5, 5, 100, 200);
textArea.setText("");
JLabel vvivod = new JLabel();
vvivod.setBounds(5, 5, 100, 200);
vvivod.setText("Вот тута будут циферки"); // Оказывается он понимает html
PlainDocument doc = (PlainDocument) textArea.getDocument();
doc.setDocumentFilter(new DigitFilter());
JPanel panel = new JPanel();
panel.add(button);
panel.add(textArea);
panel.add(vvivod);
mainWindow.setContentPane(panel);
mainWindow.setDefaultCloseOperation(EXIT_ON_CLOSE);
mainWindow.setVisible(true);
}
static class ListenerAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
String k = textArea.getText();
for (int i = 2; i < Integer.parseInt(k); ++i) {
int count = 0;
for (int j = 2; j <= i && count < 2; ++j) {
if (i % j == 0) {
++count;
}
}
if (count < 2)
vvivod = String.valueOf(i);
System.out.println(i);
}
}
}
static class DigitFilter extends DocumentFilter { // Этот код взят с простов интернета
private static final String DIGITS = "\\d+";
@Override
public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException {
if (string.matches(DIGITS)) {
super.insertString(fb, offset, string, attr);
}
}
@Override
public void replace(FilterBypass fb, int offset, int length, String string, AttributeSet attrs) throws BadLocationException {
if (string.matches(DIGITS)) {
super.replace(fb, offset, length, string, attrs);
}
}
}
}
Ответы (1 шт):
Автор решения: Дмитрий
→ Ссылка
Попробуйте так:
import javax.swing.*;
import java.awt.event.ActionEvent;
class Main extends JFrame {
private static final long serialVersionUID = 5520149575474999609L;
private final JPanel panel;
private final JButton button;
private final JTextField textArea;
private final JLabel vvivod;
public Main() {
setSize(500, 1000);
setResizable(false);
setTitle("Простые числа");
button = new JButton();
button.setActionCommand("Go");
button.setText("Посчитать");
button.addActionListener(e -> buttonPressed(e));
textArea = new JTextField(10);
textArea.setBounds(5, 5, 100, 200);
textArea.setText("");
vvivod = new JLabel();
vvivod.setBounds(5, 5, 100, 200);
vvivod.setText("Вот тута будут циферки");
panel = new JPanel();
panel.add(button);
panel.add(textArea);
panel.add(vvivod);
setContentPane(panel);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
private void buttonPressed(ActionEvent e) {
StringBuilder sb = new StringBuilder();
try {
int k = Integer.parseInt(textArea.getText());
for (int i = 2; i < k; i++) {
int count = 0;
for (int j = 2; j <= i && count < 2; ++j) {
if (i % j == 0) count++;
}
if (count < 2) sb.append(i).append(" ");
}
vvivod.setText(sb.toString());
} catch (NumberFormatException ex) {
//incorrect user input
}
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(() -> new Main());
}
}