如何定义 JPanel 的大小和位置
How define the size and the location of a JPanel
我想开发一个允许显示计数器的代码。
位于 JLabel (compte) 中的计数器本身在 JPanel (panneau) 中显示良好,但我无法定义其大小和位置。
下面是我程序的两个类的代码:
package com.company;
public class Main {
public static void main(String[] args) {
// write your code here
Compteur compteur = new Compteur();
compteur.setVisible(true);
}
}
package com.company;
import javafx.scene.layout.Border;
import javax.swing.*;
import javax.swing.border.LineBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Compteur extends JFrame implements ActionListener {
private int cpt = 0;
JButton boutonPlus = new JButton("+");
JButton boutonMoins = new JButton("-");
JPanel paneau = new JPanel();
JLabel compte = new JLabel();
public Compteur() {
setSize(1700, 900);
setDefaultCloseOperation(EXIT_ON_CLOSE);
boutonMoins.setBounds(100, 100, 100, 30);
boutonPlus.setBounds(250, 100, 100, 30);
LineBorder lineBorder = new LineBorder(Color.BLACK, 1);
compte.setBorder(lineBorder);
this.add(boutonMoins);
this.add(boutonPlus);
paneau.add(compte);
this.add(paneau);
AfficherCompteur();
boutonMoins.addActionListener(this);
boutonPlus.addActionListener(this);
this.pack();
}
private void AfficherCompteur() {
compte.setText(String.valueOf(cpt));
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == boutonMoins) {
try {
cpt--;
} catch (Exception ex) {
ex.printStackTrace();
}
}
if(e.getSource()==boutonPlus) {
try {
cpt++;
} catch (Exception ex) {
ex.printStackTrace();
}
}
AfficherCompteur();
}
}
要使组件在 JFrame 上具有绝对位置,JFrame 的内部布局必须为 null(据我所知)。
Swing 默认使用布局管理器来排列组件。如果你想提供绝对定位,你必须首先禁用默认的布局管理器。这可以通过以下方式实现。
public Compteur() {
setLayout(null);
但是我建议不要使用绝对布局,因为它们通常难以使用且难以维护。考虑阅读 official documentation
中的布局管理器
我想开发一个允许显示计数器的代码。
位于 JLabel (compte) 中的计数器本身在 JPanel (panneau) 中显示良好,但我无法定义其大小和位置。
下面是我程序的两个类的代码:
package com.company;
public class Main {
public static void main(String[] args) {
// write your code here
Compteur compteur = new Compteur();
compteur.setVisible(true);
}
}
package com.company;
import javafx.scene.layout.Border;
import javax.swing.*;
import javax.swing.border.LineBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Compteur extends JFrame implements ActionListener {
private int cpt = 0;
JButton boutonPlus = new JButton("+");
JButton boutonMoins = new JButton("-");
JPanel paneau = new JPanel();
JLabel compte = new JLabel();
public Compteur() {
setSize(1700, 900);
setDefaultCloseOperation(EXIT_ON_CLOSE);
boutonMoins.setBounds(100, 100, 100, 30);
boutonPlus.setBounds(250, 100, 100, 30);
LineBorder lineBorder = new LineBorder(Color.BLACK, 1);
compte.setBorder(lineBorder);
this.add(boutonMoins);
this.add(boutonPlus);
paneau.add(compte);
this.add(paneau);
AfficherCompteur();
boutonMoins.addActionListener(this);
boutonPlus.addActionListener(this);
this.pack();
}
private void AfficherCompteur() {
compte.setText(String.valueOf(cpt));
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == boutonMoins) {
try {
cpt--;
} catch (Exception ex) {
ex.printStackTrace();
}
}
if(e.getSource()==boutonPlus) {
try {
cpt++;
} catch (Exception ex) {
ex.printStackTrace();
}
}
AfficherCompteur();
}
}
要使组件在 JFrame 上具有绝对位置,JFrame 的内部布局必须为 null(据我所知)。
Swing 默认使用布局管理器来排列组件。如果你想提供绝对定位,你必须首先禁用默认的布局管理器。这可以通过以下方式实现。
public Compteur() {
setLayout(null);
但是我建议不要使用绝对布局,因为它们通常难以使用且难以维护。考虑阅读 official documentation
中的布局管理器