#java #graphics
#java #графика
Вопрос:
Я новичок в Java, поэтому мне было интересно, могу ли я получить некоторую помощь в передаче графики g. Я прошу пользователя выбрать один из вариантов, используя JOptionPane, и если они выберут первый вариант, я хочу вызвать созданный мной класс «Letter», а затем вызвать метод «drawLetter», который, по сути, нарисует букву «A». Однако, в основном, я не уверен, как вызвать сам метод «drawLetter». Заранее спасибо! 🙂
//Main class
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class AlphabetLetter {
public static void main(String[] args) {
String [] buttons = {"Default", "Choose Letter", "Choose Colour", "Quit"};
int option = JOptionPane.showOptionDialog(null, "Choose your option:", "ALPHABET DRAWING", JOptionPane.INFORMATION_MESSAGE, 0, null, buttons, null);
Letter letter = new Letter();
if (option == 0)
{
**//I want to call on the drawLetter method here but I'm not sure what to pass through the parameters**
letter.drawLetter(g2);
}
}
}
//letter class
import java.awt.Color;
import java.awt.Graphics2D;
import javax.swing.JFrame;
public class Letter extends JFrame{
public Letter()
{
setTitle("Alphabet Drawing");
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setLocationRelativeTo(null);
setVisible(true);
}
public void drawLetter (Graphics2D g)
{
super.paint(g);
Graphics2D g2 = (Graphics2D) g;
g2.drawString("A", 100, 100);
}
}
Комментарии:
1. Вы не должны расширять
JFrame
. РасширьтеJPanel
и добавьте это в экземплярJFrame
. Затем переопределитеpaintComponent
и нарисуйте там.
Ответ №1:
Примечание: Эти ответы были отредактированы, поскольку они плохо показывали, как выполняется рисование в Java Swing.
Как указывает camickr, вам не нужно передавать Graphics
объект вашей drawLetter()
функции, поскольку вам даже не нужна drawLetter()
функция.
Все, что вам нужно сделать, это создать a JLabel
, добавить его во фрейм и использовать setText(String)
функцию из вашего объекта JLabel.
Итак, ваш код должен выглядеть следующим образом :
- Класс AlphabetLetter :
//Main class
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class AlphabetLetter {
public static void main(String[] args) {
String [] buttons = {"Default", "Choose Letter", "Choose Colour", "Quit"};
int option = JOptionPane.showOptionDialog(null, "Choose your option:", "ALPHABET DRAWING", JOptionPane.INFORMATION_MESSAGE, 0, null, buttons, null);
Letter letter = new Letter();
JLabel label = new JLabel();
//Add the Label to the JFrame
letter.add(label);
if (option == 0)
{
//Change the text of the label
label.setText("A");
}
}
}
- Класс Letter :
//letter class
import java.awt.Color;
import java.awt.Graphics2D;
import javax.swing.JFrame;
public class Letter extends JFrame{
public Letter()
{
setTitle("Alphabet Drawing");
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setLocationRelativeTo(null);
setVisible(true);
}
}
Комментарии:
1. (1-) Не вызывайте getGraphics() в компоненте Swing. Это НЕ то, как выполняется рисование. Swing передаст графический объект компоненту, когда компоненты необходимо будет нарисовать. Прочитайте раздел из учебника Swing по пользовательскому рисованию для получения более подробной информации и рабочих примеров. Вам не нужно создавать пользовательские рисунки. Просто используйте JLabel и вызовите метод setText(…), чтобы изменить отображаемый текст.
2. Мой плохой, я немного заржавел в Java, особенно в Swing, я собираюсь отредактировать сообщение так быстро, как смогу.