Netbeans에서 생성 한 GUI에 JPanel을 추가하고 paintComponent
을 덮어 쓰는 JPanel BoxThing
을 추가하고 작은 빨간색 상자를 표시하지만 표시되지 않습니다. paintComponent
도 호출되지 않습니다. 내 자신의 JFrame을 인스턴스화하고 BoxThing을 포함하는 JPanel을 넣으면 잘 동작합니다.Netbeans GUI에서 paintComponent를 덮어 씁니다.
저는이 질문을 무작위 포럼에서 몇 번 물었습니다. 사람들은 질문에 답하지 않고 대신 custom painting tutorial을 지적합니다. 분명히 도움이되지 않습니다.
Netbeans 5.5에서 먼저 시도한 다음 Netbeans 6.8에서 동일한 문제로 전환했습니다. 그냥 BoxThing.java
의 main
을 실행하면 Main.java
package MadProGUI9000;
public class Main extends javax.swing.JFrame {
/** Creates new form Main */
public Main() {
initComponents();
panel.add(new BoxThing());
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
panel = new javax.swing.JPanel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
panel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
javax.swing.GroupLayout panelLayout = new javax.swing.GroupLayout(panel);
panel.setLayout(panelLayout);
panelLayout.setHorizontalGroup(
panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 260, Short.MAX_VALUE)
);
panelLayout.setVerticalGroup(
panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 185, Short.MAX_VALUE)
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(69, 69, 69)
.addComponent(panel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(69, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(45, 45, 45)
.addComponent(panel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(68, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Main().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JPanel panel;
// End of variables declaration
}
BoxThing.java
package MadProGUI9000;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* A component with a red box in the center.
*/
public class BoxThing extends JPanel {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
Dimension size = getSize();
int rX = (size.width - 5)/2;
int rY = (size.height - 5)/2;
g.setColor(Color.RED);
g2.fillRect(rX, rY, 5, 5);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame("BoxThing demo");
JPanel panel = new JPanel();
frame.add(panel);
panel.add(new BoxThing());
frame.setVisible(true);
panel.setPreferredSize(new Dimension(100, 100));
frame.pack();
}
});
}
}
당신이 볼 수 있듯이
, 그것은 작동합니다. Netbeans GUI를 실행하면 작동하지 않습니다. 그렇다면 Netbeans에서 생성 한 스윙 GUI에 어떻게 사용자 지정 구성 요소를 추가 할 수 있습니까?
NetBeans 생성 버전에서 FlowLayout을 사용해 보셨습니까? –
@mmyers :'panel'의 레이아웃을 FlowLayout으로 바꾸고 그것을 고치면 GroupLayout을 사용하기 시작했습니다. –
이 머신에 Netbeans이 없거나 직접 시도 할 것입니다. 그것은 레이아웃 문제 였음에 틀림 없지만 왜 숨겨진 코드인지는 알 수 없습니다. –