虽然众所周知,将setBounds()方法与setLayout(null)一起使用并不是一个好习惯,但我必须这样做才能进行自定义设计。问题是,我的面板可以因其y坐标而改变,但不能设置为给定的x坐标。在我给定的代码中,无论x坐标是什么,面板都保持不变!
怎么解决?欢迎任何帮助或建议!真的是一个奇怪的问题!
在代码中修改
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 :(得分:0)
如果您的PanelMeter组件用于某些父级(如JFrame),则您已将两个组件设置为setLayout(null)。然后必须接受设置PanelMeter的界限。