Хотя известно, что использование метода setBounds() с setLayout (null) не является хорошей практикой, я должен сделать это для индивидуального дизайна. Проблема в том, что моя панель может быть изменена из-за ее координаты y, но она не может быть установлена на заданную координату x. В моем коде, независимо от координаты x, панель остается неизменной!JPanel не был изменен из-за заданной x-координаты в методе setBounds()
Как это можно решить? Любая помощь или предложение приветствуются! действительно, это странная проблема!
Редактировать в коде:
public class PanelMeter extends JPanel{
JLabel meterImage;
javax.swing.Timer timer;
int x;
public PanelMeter()
{
this.setBounds(400,100,300, 210);
this.setBackground(Color.lightGray);
this.setLayout(null);
this.setBorder(BorderFactory.createLineBorder(Color.white, 3));
addImage();
}
public void addImage()
{
try {
BufferedImage image= ImageIO.read(new File("E:\\java\\Accelromete final\\meter.png"));
ImageIcon icon= new ImageIcon(image);
meterImage= new JLabel(icon);
meterImage.setBounds(10, 1, 300, 390);
this.add(meterImage);
} catch (IOException e) {
System.out.println("Error in loading image!");
}
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.fillOval(140, 160, 15, 15);
g.drawLine(144, 165, 147, 80);
g.drawLine(151, 165, 147, 80);
g.drawString("Left", 50, 70);
g.drawString("Right",230, 70);
}
}
Главный класс
public class Main {
public static void main(String[] args) {
MainFrame frame= new MainFrame();
PanelValue panelValue= new PanelValue();
PanelMeter panelMeter= new PanelMeter();
Panel3D panel3d= new Panel3D();
frame.add(panel3d);
frame.add(panelMeter);
frame.add(panelValue);
frame.setVisible(true);
}
}
JFrame класс
public class MainFrame extends JFrame implements ActionListener {
JLabel ipLabel, portLabel;
JTextField ipField, portField;
JButton connectButton;
public MainFrame()
{
this.setSize(800,650);
this.setLayout(null);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
//addComponents();
}
}
Вы тоже «setLayout (null)» в рамку? – KDM
И если вы это сделали ('setLayout (null)'), то вместо этого взгляните на [Укладка компонентов внутри контейнера] (http://docs.oracle.com/javase/tutorial/uiswing/layout /index.html). Избегайте использования макетов «null», идеальные макеты пикселей - это иллюзия в современном дизайне ui. Слишком много факторов, которые влияют на индивидуальный размер компонентов, ни один из которых вы не можете контролировать. Swing был разработан для работы с менеджерами компоновки в ядре, отбросив их, не будет конца проблем и проблем, которые вы будете тратить все больше времени на исправление – MadProgrammer
Да, JFrame имеет setLayout (null) @KDM :( –