У меня есть следующий код (попытка узнать качели и java). Я создал лестницу, используя прямоугольные компоненты, используя класс и помещенный в основной кадр. Все работает нормально, но если я немного изменю его размер, объект ShapeManager (т. Е. Лестница) исчезнет. Я не знаю, что происходит. Любая помощь пожалуйста.прямоугольный компонент исчезает при изменении размера рамки
GUIMain Класс:
package mainProg;
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.event.*;
import java.awt.*;
public class GUIMain {
static JPanel mainPanel;
static JButton[] newButtons;
static ShapeManager newShape;
private static class BtnEvtHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
//System.exit(0);
JOptionPane.showMessageDialog(null, "WELCOME");
}
}
private static JButton[] createButtons() {
JButton[] buttonArray= new JButton[2];
buttonArray[0]=new JButton("OK");
buttonArray[1]=new JButton("MOVE");
BtnEvtHandler okButtonHandler= new BtnEvtHandler();
(buttonArray[0]).addActionListener(okButtonHandler);
return buttonArray;
}
private static ShapeManager createShape(int x) {
ShapeManager newContent=new ShapeManager(x);
return newContent;
}
private static JPanel mainContainer() {
JPanel mainPanel= new JPanel();
mainPanel.setSize(400, 400);
return mainPanel;
}
private static void createAndShowGUI() {
JFrame.setDefaultLookAndFeelDecorated(false);
JFrame frame = new JFrame(" DB ");
mainPanel= mainContainer();
mainPanel.setLayout(new BorderLayout(10, 10));
newButtons= createButtons();
newShape= createShape(20);
newButtons[0].setHorizontalAlignment(0);
mainPanel.add(newButtons[0],BorderLayout.PAGE_START);
newButtons[1].setHorizontalAlignment(0);
mainPanel.add(newButtons[1],BorderLayout.PAGE_END);
newShape.setPreferredSize(new Dimension(400, 400));
mainPanel.add(newShape, BorderLayout.LINE_END);
frame.setContentPane(mainPanel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 600);
frame.setLocation(500,200);
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
ShapeManager Класс:
package mainProg;
import javax.swing.JPanel;
import java.awt.*;
@SuppressWarnings("serial")
class ShapeManager extends JPanel {
int rectPos;
ShapeManager(int rectPos) {
setPreferredSize(new Dimension(400,400));
this.rectPos=rectPos;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
while (rectPos<150) {
g.setColor(Color.BLUE);
g.drawRect(rectPos+10, rectPos+10, 100, 10);
g.fillRect(rectPos+10, rectPos+10, 100, 10);
rectPos=rectPos+10;
}
}
}
Вы не должны использовать статические переменные и статические методы. Это плохой дизайн и приведет к неприятностям в будущем. Я указал вам на учебник Swing в последнем вопросе. Ни один из примеров не делает этого. – camickr
@camickr: Я читаю и делаю в то же время, но да, вы правы, а не полностью, я думаю, что учусь на ошибках. Я еще раз прочитаю учебники по размаху. Спасибо за напоминание. –
@camickr: Не могли бы вы дать мне ссылку на учебник, в которой показаны альтернативные способы предотвращения использования статической переменной и методов. Это было бы здорово для меня. Я был знаком с python, и Java по-прежнему нова для меня. Любые советы по хорошей практике программирования с Java были бы замечательными. –