Im пытаюсь представить заданную математическую функцию внутри JPanel, пока что я просто имею ось, но ось не рисует, и я не знаю, почему, кстати, если я позвоню new Axis()
внутри рамки, делает краска.Картина внутри JPanel
Основной класс
public class MyClass{
final static int HEIGHT = 400;
final static int WIDTH = 400;
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(WIDTH,HEIGHT);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPanel(frame);
frame.setVisible(true);
}
static void setPanel(JFrame frame) {
JPanel panel = new JPanel();
panel.setBackground(Color.GRAY);
panel.add(new Axis());
frame.add(panel);
}
}
Ось класса
@SuppressWarnings("serial")
public class Axis extends JComponent{
static final int LONG_AXIS = 150;
public void paintComponent(Graphics g) {
int CenterX = getWidth()/2;
int CenterY = getHeight()/2;
g.setColor(Color.BLACK);
//x axis line
g.drawLine(CenterX - LONG_AXIS, CenterY, CenterX + LONG_AXIS, CenterY);
//y axis line
g.drawLine(CenterX, CenterY - LONG_AXIS, CenterX, CenterY + LONG_AXIS);
}
}
Другой вопрос: Можно ли иметь несколько методов краски?
BTW некоторые плохие практики: (1) код свинг не работает на Событие Dispatch Thread (2) не соответствует соглашению об именах (например, int CenterX) (3) предпочтительным является «статический окончательный» (4) метод статического сеттера не рекомендуется - вместо этого расширяет JFrame – tony200910041
Согласитесь со всеми этими состояниями @ tony200910041, отличными от '' extends JFrame ''бит. Вы можете рисовать себя в углу, если ваш класс расширяет JFrame, заставляя вас создавать и отображать JFrames, когда требуется больше гибкости. Чаще всего ваши классы GUI должны быть ориентированы на создание JPanels, которые затем могут быть помещены в JFrames или JDialogs или JTabbedPanes или заменены через CardLayouts, где это необходимо. Это значительно повысит гибкость вашего графического интерфейса. –