여러 하위 구성 요소가있는 JPanel이있는 경우 부모 크기가 조정되는 방법에도 불구하고 JPanel이 사각형으로 유지되도록하려면 어떻게해야합니까? 다음 코드에서 변형을 시도했지만 서브 컴포넌트도 사각형이되지는 않습니다.JPanel 사각형 만들기
public void paint(Graphics g){
if(this.isSquare()){
Dimension d = this.getSize();
if(d.height > d.width){
this.setSize(d.width, d.width);
} else {
this.setSize(d.height, d.height);
}
super.paint(g);
}
여기에 SSCCE가 있습니다.
포함하는 상위 :
import javax.swing.JFrame;
public class TestFrame extends JFrame{
public TestFrame(){
this.add(new TestPanel());
}
public static void main(String[] args){
TestFrame tf = new TestFrame();
tf.setSize(500, 500);
tf.setVisible(true);
}
}
되어야 하는지를 사각형 인 JPanel :
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
public class TestPanel extends JPanel{
private boolean isSquare;
public TestPanel(){
this.setSquare(true);
this.setLayout(new BorderLayout());
JLabel panel1 = new JLabel();
panel1.setBorder(new LineBorder(Color.RED, 4));
panel1.setBackground(Color.CYAN);
JLabel panel2 = new JLabel();
panel2.setBorder(new LineBorder(Color.BLUE, 4));
panel2.setBackground(Color.CYAN);
this.setBorder(new LineBorder(Color.GREEN, 4));
this.setBackground(Color.CYAN);
this.add(panel1, BorderLayout.WEST);
this.add(panel2, BorderLayout.EAST);
}
public void paint(Graphics g){
if(this.isSquare()){
Dimension d = this.getSize();
if(d.height > d.width){
this.setSize(d.width, d.width);
} else {
this.setSize(d.height, d.height);
}
super.paint(g);
}
}
private boolean isSquare() {
return isSquare;
}
private void setSquare(boolean isSquare) {
this.isSquare = isSquare;
}
}
가 사용'JPanel의 # getPreferredSize' 및 레이아웃 구성 요소가 존중 (모든 구성 요소 광장을 만드는) 않는 자신의 레이아웃 매니저를 생성 그것의 구성 요소의 기본 크기는 – MadProgrammer
입니다. 1)'JPanel'은'paint (Graphics)'대신'paintComponent (Graphics)'를 오버라이드합니다. 2) 두 메소드 중 하나에서'setSize (..) '를 호출하지 마십시오. 3) 더 빨리 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. 4)이 사각형 구성 요소의 요점은 무엇입니까? –
@AndrewThompson SSCCE를 게시했습니다 ... 사각형 구성 요소가 게임 보드의 역할을 수행하지만, 이는 내 특정 인스턴스에 있습니다. 이 질문과 후속 해답은 어떤 이유로 든 JComponent를 일관되게 정연하게 만드는 방법을 찾는 모든 사람들에게 도움이 될 것입니다. – MirroredFate