최근에 JComponents로 GUI 시스템을 작성하기 시작했습니다. 모든 것이 작동하지만 JFrame의 아래쪽과 오른쪽면은 칠해지지 않고 흰색을 유지합니다. 실행 GUI의Java JComponents가 JFrame의 가장자리 근처에서 자르고 있습니다.
스크린 샷 : 당신은 'drknBtn'올바르게 표시를 볼 수있는 스크린 샷에서
; 이것은 사진을 찍기 전에 마우스로 마우스를 맴돌 았기 때문입니다. 버튼 위로 마우스를 가져 가면 새로 고침되어 정상적으로 표시됩니다. 이 때문에, 나는 그들을 보유한 패널을 가정 할 것이고, 'bottomPnl'은 그 공백을 덮고 있지만 그 패널 배경은 바닥 부분에 보이지 않는다. 이 문제를 일으킬 수있는 아이디어가 있습니까? pack()을 호출하기 전에 'bottomPnl.repaint()'를 직접 호출했지만 변경은하지 않았습니다.
내 코드는 다음과 같습니다. 주 : 각 JComponent마다, 그 컴퍼넌트를 확장하는 클래스를 작성했습니다. 이 방법으로 각 클래스를 개별적으로 수행하는 대신 이러한 클래스의 생성자에서 구성 요소에 대한 기본값을 설정할 수 있습니다. 프레임 및 패널의 관련 속성을 나열합니다. 프레임 : setSize (width, height); setResizeable (false); setLocationRelativeTo (null); 패널 : setLayoutManager (생성자에서); setPreferredSize (새로운 크기 (폭, 높이)); setMinimumSize 및 setMaximumSize와 같습니다.
public Display(String title, int w, int h){
width=w;
height=h;
frame = new FrameUI(title,w,h);
//parent panel
parentPnl= new PanelUI(width,height, new FlowLayout(FlowLayout.CENTER,0,0));
parentPnl.setBackground(new Color(100,175,175));
//top panel
topPnl= new PanelUI(width,(int)(height*.15), new FlowLayout(FlowLayout.CENTER,0,0));
topPnl.setBackground(new Color(100,175,175));
chooseFileBtn = new ButtonUI("Browse...",topPnl.getWidth()/4,(int)(topPnl.getHeight()*.9),new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
fc = new FileChooserUI();
fc.setFileFilter(new FileNameExtensionFilter("Image files", ImageIO.getReaderFileSuffixes()));
int result = fc.showOpenDialog(null);
try {
if (result == JFileChooser.APPROVE_OPTION) {
picture.setIcon(new ImageIcon(ImageIO.read(fc.getSelectedFile()).getScaledInstance(picture.getWidth(),picture.getHeight(), 0)));
}
} catch (Exception iOException) {
}
}
});
//middle panel
midPnl= new PanelUI((int)(width*.85),(int)(height*.7), new FlowLayout(FlowLayout.CENTER,0,0));
midPnl.setBackground(new Color(75,125,125));
picture = new LabelUI("",midPnl.getWidth(),midPnl.getHeight());
picture.setBackground(new Color(75,125,125));
picture.setVisible(true);
picture.setOpaque(true);
picture.setIcon(null);
//bottom panel
bottomPnl= new PanelUI(width,(int)(height*.15), new FlowLayout(FlowLayout.CENTER,0,0));
bottomPnl.setBackground(new Color(100,175,175));
ltnBtn = new ButtonUI("Lighten Picture",bottomPnl.getWidth()/3,(int)(bottomPnl.getHeight()*.9),new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
}
});
ltnBtn.setBackground(Color.LIGHT_GRAY);
ltnBtn.setForeground(Color.BLACK);
drknBtn = new ButtonUI("Darken Picture",bottomPnl.getWidth()/3,(int)(bottomPnl.getHeight()*.9),new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
}
});
drknBtn.setBackground(Color.DARK_GRAY);
drknBtn.setForeground(Color.WHITE);
//add UI Objects
topPnl.add(chooseFileBtn);
midPnl.add(picture);
bottomPnl.add(ltnBtn);
bottomPnl.add(drknBtn);
parentPnl.add(topPnl);
parentPnl.add(midPnl);
parentPnl.add(bottomPnl);
Container contentPane = frame.getContentPane();
contentPane.add(parentPnl);
frame.pack();
frame.setVisible(true);
}
} 수동으로 패널의 크기에 따라서 패널에 추가 한 구성 요소의 크기를 제어하려고하는 것처럼
처음에는'null' 레이아웃을 사용하고 있습니다. 내 생각에'paint' 나'paintComponent'를 오버라이드하고'super' 메소드를 호출하지 못했습니다. – MadProgrammer