*** EDIT - я удалил все ненужного кода (я думал, что это может быть полезным для кого-то, чтобы увидеть шаги, которые я предприняли для устранения)Мои метки в качестве объекта инстанс исчезают
Я имею очень странная проблема. Я создаю экземпляр объекта с несколькими объектами swing, но jlabel на всех, кроме самого последнего экземпляра, исчезает. Они все одинаковы, но только индекс наивысшего номера массива имеет свою метку. Но все они должны быть замечены. Я подтвердил, что они находятся в правильном положении и имеют правильный размер, и он установлен на видимый, но я не могу понять, почему это происходит. Я запустил программу на другом компьютере и получил те же результаты. Есть только два класса. Это довольно простая программа, но я не могу представить ее, может ли кто-нибудь запустить этот код и сообщить, работает ли он? если нет, кто-то может определить проблему?
import java.io.*;
import java.lang.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class sizer extends JPanel {
public static int lhval = 10000;
public static int lvval = 10000;
public static int shval = 10000;
public static int svval = 10000;
public static String IDlbltxt = "0";
public static int IDlblint = 0;
static boolean DEBUG = true;
public final static JLabel IDlbl = new JLabel("0");
public sizer (int arg) {
setLayout(null);
setSize(91, 88);
setVisible(true);
IDlbltxt = Integer.toString(arg);
IDlblint = arg;
IDlbl.setHorizontalAlignment(SwingConstants.RIGHT);
IDlbl.setLocation(40 , 30);
IDlbl.setFont(new Font("Serif", Font.PLAIN, 18));
IDlbl.setText(IDlbltxt);
IDlbl.setVisible(true);
IDlbl.setBorder(BorderFactory.createLineBorder(Color.black, 5));
IDlbl.setSize(IDlbl.getPreferredSize());
add(IDlbl);
repaint();
}
public static void main(String[] args) {
final JFrame frame = new JFrame("sizer - gettin it sized");
frame.setLayout(null);
frame.setSize(320, 260);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.getContentPane().setBackground(Color.red);
final sizer s1 = new sizer(0);
s1.setLocation(1, 1);
frame.add(s1);
frame.repaint();
}
}
вот второй файл.
import java.io.*;
import java.lang.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class sizerist extends JPanel {
final static sizer[] sizing = new sizer[21];
public sizerist() {}
public static void main(String[] args) {
final JFrame frame = new JFrame("sizer - gettin it sized");
frame.setLayout(null);
frame.setSize(320, 260);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.getContentPane().setBackground(Color.red);
for (int i=1; i<6; i++) {
sizing[i] = new sizer(1);
if (i == 1) {
sizing[i].setLocation(1, 1);
} else {
sizing[i].setLocation(sizing[i-1].getLocation().x, sizing[i-1].getLocation().y + sizing[i-1].getSize().height + 2);
}
frame.add(sizing[i]);
frame.setSize(sizing[i].getSize().width + sizing[i].getLocation().x, sizing[i].getSize().height + sizing[i].getLocation().y + 40);
}
frame.repaint();
}
}
Это не делает код легче читать, что вы не используете Стандарты Java для именования (PascalCase для классов и camelCase для переменных). – chrylis
Нулевые макеты не помогут вам. if (true) и if (false) не имеет смысла – MadProgrammer
Call frame.setVisible (true) last, после того, как вы создали пользовательский интерфейс – MadProgrammer