Я хотел бы, очень много, рассказать своему профессору, что они должны вернуться в школу и узнать, как использовать свинг правильно
Вы должны начать принимать взглянуть на Painting in AWT and Swing и Performing Custom Painting для более подробную информацию о том, как покрасочные работы в свинг
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.Ellipse2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 400);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g.create();
Ellipse2D.Double Circle = new Ellipse2D.Double(100, 50, 75, 75);
g2.setColor(Color.RED);
g2.fill(Circle);
Rectangle box = new Rectangle(200, 100, 150, 150);
g2.setColor(Color.RED);
g2.fill(box);
g2.dispose();
}
}
}
код Обзор ...
public class Bunny {
public static void main(String[] args) {
MyFrame f = new MyFrame();
f.setSize(500, 400);
f.setVisible(true);
f.setLocation(50, 100);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Плохо: Взаимодействие с пользовательским интерфейсом извне контекста события Диспетчерская тема. См Initial Threads подробности
public class MyFrame extends JFrame {
public MyFrame() {
}
}
Bad: Удлинение из контейнера верхнего уровня (подобно JFrame
), как правило, препятствуют, вы не добавляя новые функции в классе, и это одна из областей, где происходит большинство проблем , Возможно, вам захочется провести некоторое исследование «состав над наследованием».
Вы также на самом деле ничего не добавляете к кадру, поэтому оно будет выглядеть пустым.
public class MyPanel extends JPanel {
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
Ellipse2D.Double Circle = new Ellipse2D.Double(100, 50, 75, 75);
g2.setColor(Color.RED);
g2.fill(Circle);
Rectangle box = new Rectangle(200, 100, 150, 150);
g2.setColor(Color.RED);
g2.fill(box);
Color myColor = new Color(255, 0, 0);
}
}
Bad: paintComponent
никогда не должен быть public
, нет никаких оснований когда-либо, что любой другой класс должен вызывать этот метод. Не вызывая super.paintComponent
, это не вызовет ошибок графических ошибок и проблем, вы всегда должны сначала позвонить super.paintComponent
. Единственный раз, когда вы не были, когда вы знаете, что делаете, и у вас есть очень веская причина не ..., которая похожа на < 1% времени.
Напишите код в 'jbInit()'. –