2015-09-03 3 views
0

Хотя известно, что использование метода setBounds() с setLayout (null) не является хорошей практикой, я должен сделать это для индивидуального дизайна. Проблема в том, что моя панель может быть изменена из-за ее координаты y, но она не может быть установлена ​​на заданную координату x. В моем коде, независимо от координаты x, панель остается неизменной!JPanel не был изменен из-за заданной x-координаты в методе setBounds()

Как это можно решить? Любая помощь или предложение приветствуются! действительно, это странная проблема!

Скриншот: enter image description here

Редактировать в коде:

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(); 
    } 
} 
+0

Вы тоже «setLayout (null)» в рамку? – KDM

+2

И если вы это сделали ('setLayout (null)'), то вместо этого взгляните на [Укладка компонентов внутри контейнера] (http://docs.oracle.com/javase/tutorial/uiswing/layout /index.html). Избегайте использования макетов «null», идеальные макеты пикселей - это иллюзия в современном дизайне ui. Слишком много факторов, которые влияют на индивидуальный размер компонентов, ни один из которых вы не можете контролировать. Swing был разработан для работы с менеджерами компоновки в ядре, отбросив их, не будет конца проблем и проблем, которые вы будете тратить все больше времени на исправление – MadProgrammer

+0

Да, JFrame имеет setLayout (null) @KDM :( –

ответ

0

В случае, если ваш компонент PanelMeter используется в какой-нибудь из родителей, как JFrame, вы установили в setLayout оба компонента (нуль). Затем необходимо принять меры настройки PanelMeter.

+0

Я сделал это, но все же! –

+0

Если вы можете поделиться более подробными сведениями о своем коде или объяснить, какие компоненты вы используете в качестве слоев? –

+0

Я дал все классы сейчас за помощь :) @Georgi Penev –

 Смежные вопросы

  • Нет связанных вопросов^_^