我已經徹底搜索(我認爲)瞭解我的問題的答案。我是初學者,所以我可能只是不知道要尋找什麼。我正在嘗試對我使用Graphics2D和GeneralPath編寫的辦公室佈局(表格,椅子)進行概述,並使用每位主持人的姓名對JLabels進行編碼。 如果已經得到解答,我表示歉意,但我確實看過。 (注:圖形是超級簡單現在:表只是一個正方形和椅子都只是線)辦公室佈局示例。 JLabels不會顯示在JApplet中
公共類DemoReception擴展JApplet的{
@Override
public void paint(Graphics g){
//draws table
Graphics2D g2 = (Graphics2D) g;
g2.setStroke(new BasicStroke(4.0f));
g2.setColor(Color.BLACK);
int[] xPoints={150,700,700,150};
int[] yPoints={250,250,550,550};
GeneralPath path = new GeneralPath(GeneralPath.WIND_EVEN_ODD,xPoints.length);
path.moveTo(xPoints[0], yPoints[0]);
for (int i = 0; i < xPoints.length; i++) {
path.lineTo(xPoints[i], yPoints[i]);
}
path.closePath();
g2.draw(path);
//draws chairs
g2.setColor(Color.RED);
path = new GeneralPath(GeneralPath.WIND_NON_ZERO);
path.moveTo(260,240);//Person1
path.lineTo(310,240);
path.moveTo(510,240);//Person2
path.lineTo(560,240);
path.moveTo(260,560);//Person3
path.lineTo(310,560);
path.moveTo(510,560);//Person4
path.lineTo(560,560);
path.closePath();
g2.draw(path);
}
這裏是主要的方法:
public static void main(String[] args) {
int labelwidth = 50;
int labelheight = 10;
JFrame testFrame = new JFrame("Test Layout");
testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JApplet demo = new DemoReception();
testFrame.setBackground(Color.white);
testFrame.getContentPane().add(demo);
testFrame.pack();
testFrame.setMinimumSize(new Dimension(1000,710));
testFrame.setSize(new Dimension(1000,710));
JPanel testPanel = new JPanel();
testPanel.setAlignmentX(0);
testPanel.setAlignmentY(0);
label1 = new JLabel("Person1");
label2 = new JLabel("Person2");
label3 = new JLabel("Person3");
label4 = new JLabel("Person4");
label1.setAlignmentX(260);
label1.setAlignmentY(235);
label1.setSize(labelwidth, labelheight);
label1.setVisible(true);
testPanel.add(label1);
label2.setAlignmentX(510);
label2.setAlignmentY(235);
label2.setSize(labelwidth, labelwidth);
label2.setVisible(true);
testPanel.add(label2);
label3.setAlignmentX(260);
label3.setAlignmentY(565);
label3.setSize(labelwidth, labelwidth);
label3.setVisible(true);
testPanel.add(label3);
label4.setAlignmentX(510);
label4.setAlignmentY(565);
label4.setSize(labelwidth, labelwidth);
label4.setVisible(true);
testPanel.add(label4);
testFrame.getContentPane().add(testPanel);
testFrame.setVisible(true);
}
當我運行它時,我得到的只是帶有圖形的JFrame,但JLabels不顯示。 任何幫助,將不勝感激。
中列出的步驟操作您的繪圖方法是否需要調用super.paint(g)?在我的頭頂,看起來你的paint()覆蓋會繪製圖形,但它不會繪製其他任何東西。它不會自動完成覆蓋版本所做的其餘內容。你需要通過調用super.paint(g)來做到這一點。看看是否有效。 – ajb
P.S.我見過其他的答案,建議覆蓋paintComponent()而不是paint()...對不起,我不知道你是否需要這裏。如果你這樣做,同樣適用 - 你必須使它調用super.paintComponent(g)。 – ajb